質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

937閲覧

PHPでファイルを作成

phj

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

1クリップ

投稿2021/07/28 15:20

編集2021/07/29 14:34

前提・実現したいこと

PHPでhtmlファイルを作り、そのhtmlファイルに送信したの値を書き込む

発生している問題・エラーメッセージ

htmlファイル自体の作成はできたのですがそのファイルに送信した値を書き込むことができていません。

Warning: session_start(): Session cannot be started after headers have already been sent in /Applications/MAMP/htdocs/create_file/test.php on line 2 Warning: Undefined variable $_SESSION in /Applications/MAMP/htdocs/create_file/test.php on line 4 Warning: Trying to access array offset on value of type null in /Applications/MAMP/htdocs/create_file/test.php on line 4

該当のソースコード

//create.php <?php if ($_SERVER['REQUEST_METHOD'] === 'POST'){ require_once dirname(__FILE__).'/data.php';//data.phpを読み込む foreach ($kanto as $key => $val ) { $url = "http://localhost/create_file/template.php?prefecture=".$key; createFile($url,$key); } } //ファイル生成の関数 function createFile($url,$key){ $buff = file_get_contents($url);//urlの内容を読み取る $path="html/";//生成するファイルのディレクトリ chkDir($path); $fname = "html/".$key.".html";//生成するファイルのディレクトリとファイル名 $fhandle = fopen( $fname, "w");//ファイルを書き込みモードで開く。 fwrite( $fhandle, $buff);//ファイルをバイナリモードで書き込む。第二引数に書き込みたい文字列 fclose( $fhandle );//ファイルポインタを閉じる } //ディレクトリのアクセス権の関数 function chkDir($path){ if(!file_exists($path)){ mkdir($path, 0777);//パーミッションを指定してフォルダーを生成 chmod($path, 0777);//Chmod関数でパーミッション変更 } } ?> <!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body> <form action="" method="POST"> <p><input type="text" name="data[name]" size="25" value=""></p> <p><input type="submit" value="送信" name="create"></p> </form> </body> </html>
//template.php <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>テスト</title> </head> <body> <h1><?php include('./test.php'); ?></h1> </body> </html>
//data.php <?php session_start(); // セッション情報の保存 if($_SERVER['REQUEST_METHOD'] === 'GET'){ $data = []; $data = $_POST['data']; $_SESSION['name'] = $data["name"]; $kanto = array( $data["name"] => $data ); }; ?>
//test.php <?php session_start(); $name = $_SESSION['name']; echo $name; ?>

試したこと

別にphpファイルを作って$name = $_SESSION['name'];の値をechoで表示させると警告文が出なかったので値は入っていると思うのですが、なぜ値が入っていないことになっているのかがわかりません。
また$name = $_SESSION['name'];を$name = "a";にしてみると警告文が出ずaが表示されたのでおそらくこの部分が原因だと思っているのですが、ここから先がわかっていない状況です。

補足情報(FW/ツールのバージョンなど)

MAMPを使用しており、PHPのバージョンは8.0.0です。

参考にさせていただいたサイト

//Sessionについて
https://blog.zolesystem.info/%E3%80%90session%E3%80%91php%E3%81%A7%E4%B8%80%E6%99%82%E7%9A%84%E3%81%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E4%BF%9D%E6%8C%81%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/

//ファイル生成について
https://tech-dig.jp/php_create_file/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2021/07/28 16:42 編集

template.phpはどこから呼ばれるのでしょうか? create.phpをみてもPOSTでアクセスしてる形跡もありませんし(file_get_contents()の引数が一つの場合はGETになるはず)、$_SERVER['REQUEST_METHOD'] === 'POST' が ture になる感じを受けません。ざっくりとソースコードを見ただけですのでなんとも言えませんが。このif文を外すか、$_SERVER['REQUEST_METHOD'] === 'GET'にしたらどうでしょう。
phj

2021/07/29 02:29

ご意見ありがとうございます。$_SERVER['REQUEST_METHOD'] === 'GETにしたらtemplate.phpのエラーは消すことができました。
guest

回答2

0

template.phpはPOSTで実行されてないと思います。
おそらくGETです(デバッグしてみてください)

リクエスト送信したいのでしたらfile_get_contentsよりもcurl()を利用されたほうが良いと思います。

WebAPIとして考えられているのでしたら、外部からのリクエストであることも加味しSESSIONではなくPOSTリクエストとして構成すべきですしね。

そうでなくセッションは絶対で自身の中でしか利用しない、限定的なものならincludeしてhtmlを変数に全部詰め込んで返す形で十分です。

投稿2021/07/28 21:32

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

phj

2021/07/29 05:06

ご意見ありがとうございます。 試してみます。
phj

2021/07/29 14:36

試してみたのですが、作成したhtmlファイルを開くと警告が出て正常に表示させることができませんでした。 test.phpファイル単体で開くと問題なく表示させることができました。
guest

0

自己解決

もっと良い方法があると思うのですが、フォームの内容をテキストファイルに保存してその内容を読み込むという方法で自分のしたいことを実現することができました。

投稿2021/07/30 12:55

phj

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問