質問:fwrite の文法が間違っていますか?

このQ&Aのポイント
  • 質問内容:どうしてもエラーになってしまいます。どこが間違っているかお教え頂けませんでしょうか?
  • 質問内容:エラーが発生していますが、fwrite の文法が間違っている可能性はありますか?
  • 質問内容:fwrite の文法に問題があるのか、エラーが発生します。どこを修正すれば解決するでしょうか?
回答を見る
  • ベストアンサー

fwrite の文法が間違っていますか?

どうしてもエラーになってしまいます どこが間違っているかお教え頂けませんでしょうか 宜しくお願い致します $fp_i = fopen($indexphp, "w"); fwrite($fp_i, "<html>\n<head>\n"); fwrite($fp_i, "<title>title</title>\n"); fwrite($fp_i, "<meta http-equiv=\"content-type\" content=\"text/html; charset=Shift_JIS\">\n"); fwrite($fp_i, "</head>\n"); fwrite($fp_i, "<body>\n"); fwrite($fp_i, "<?php\n"); fwrite($fp_i, "$txt = 'test'\n"); fwrite($fp_i, "print'($txt)';\n"); fwrite($fp_i, "?>\n"); fwrite($fp_i, "</body>\n"); fwrite($fp_i, "</html>");

  • PHP
  • 回答数5
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.5

利用者によって内容を変える必要がないのであれば、copy でも問題ないでしょう。 その場合ですが、 > copy($file, ./$getuserID/$newfile) これは、 > copy($file, "./$getuserID/$newfile"); とすれば動作します。 あとは、内容をユーザーに応じて書き変える場合についてですが、 質問者さんには難しすぎたようなのでもうちょっと簡単なコードで説明しておきます。 (ただし、No.4のコード自体はあまり難しいことはしていません。 あれが理解できないようでは今後のプログラム開発が前途多難です。 あのコードは理解できる程度には、PHPについて学習を進めた方がいいと思います。) 以下、単機能化してコメントを入れた、「template/index.php から $getuserID/index.php を作るコード」です。 template/index.php は、回答No.4で示したものを用意しておいてください。 それで、回答No3補足で示されたコードと同じものが出力生成されます。 --- // ファイル./template/index.php の内容を$dataに読み込む $data = file_get_contents("./template/index.php"); // $data中の「%{getuserID}」という文字列を、変数$getuserIDの内容で置き換える $data = preg_replace('/%{getuserID}/', $getuserID, $data); // ファイル ./$getuserID/index.php に、$data を書き込む $fp_i = fopen("./$getuserID/index.php", "w"); fwrite($fp_i, $data); fclose($fp_i); --- No.4の回答は、上述のコードを汎用的に使えるように関数化したものです。 このコードでも、preg_replace 行を追加していけば、 ユーザー毎に生成するファイルに対する内容置き換え項目の追加ができます。

100POINT
質問者

お礼

mtaka2様 今回のご指導いただきましたもので上手くいきました。 index.phpをschedule.phpに置き換えまして当初希望のことも無事完了できました。 超初心者の私にもよく分かるようご説明下さり感謝いたします。 スキルを上げるよう努力致します。

100POINT
質問者

補足

今回教えていただきました件で >preg_replace 行を追加していけば、・・・ ということで下記1行追加してみました。 --- $data = preg_replace('/%{getuserID}/', $getuserID, $data); $data = preg_replace('/%{getuserPASS}/', $getuserPASS, $data); --- template/index.phpには下記追加しました。 --- print "<b>%{getuserID}さん%{getuserPASS}<br>".$year."/".$mon."月予定表</b><HR><table>"; --- しかし何も表示されませんでした。 アドバイスいただけますと助かります。

その他の回答 (4)

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.4

> 新規登録のログインIDでディレクトリを作成しその中に別に作成してあります > schedule.phpファイルを自動でコピーしたいと思っております。 そういうことでしたら、いわゆる「テンプレートエンジン」の考え方が近いかと思います。 以下のコードでどうでしょうか。 ---ここから--- $indexsrc ="template/index.php"; $schedulesrc="template/schedule.php"; $conv = array( //会員ごとに置き換えを行う文字列を指定する 'getuserID' => $getuserID ); convert($indexsrc, $indexhtml, $conv); //convert($schedulesrc, $schedulehtml, $conv); //これでshcdule.php生成も可能 function convert($src, $dst, $conv) { $data = file_get_contents($src); foreach ($conv as $name => $value) { $data = preg_replace('/%{'.$name.'}/', $value, $data); } $fp_i = fopen($dst, "w"); flock($fp_i, 2); fwrite($fp_i, $data); flock($fp_i, 3); fclose($fp_i); } ---ここまで--- template/index.php を読み込んで、「%{getuserID}」という文字列を、変数$getuserIDの値で置き換えて、$indexhtml に書き込む、というコードです。 template/index.php を ---ここから--- html> <head> <title>%{getuserID}</title> <meta http-equiv="content-type" content="text/html; charset=Shift_JIS"> </head> <body> %{getuserID}<hr><br> 初期ページ。 </body> </html> ---ここまで--- といった内容で作っておけば、これを元に $indexhtml が作成されます。 連想記憶配列 $conv の内容を修正すれば、他の文字列差替も追加できます。 また、schedule.php の生成についても、同様にベースとなるテンプレートファイルを作っておけば、 convert 関数の呼び出しだけで実現できます。

100POINT
質問者

補足

ご教授ありがとうございます。 しかしながら私のスキルでは難しいようですので $file = 'example.txt'; $newfile = 'example.txt.bak'; if (!copy($file, $newfile)) { echo "failed to copy $file...\n"; } のイメージで上記をテストしましたら同じディレクトリに「example.txt.bak」 が作成されました。 下記に書き換えましてテストしましたがこれはエラーでした 簡単にコピーする方法はないでしょうか? $file = 'schedule.php'; $newfile = 'schedule.php'; copy($file, ./$getuserID/$newfile) 新規ログインIDは以下のように作成しております。 //ディレクトリを作成 mkdir ( $getuserID , 0777); 以上宜しくお願い致します。

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

補足について > 別にs.phpをアップしておいてそれをコピーまたは代入するようにはできないでしょうか? 出来るか出来ないかといえば「出来る」が答えになりますが、その実現方法はいくつもあり、それぞれメリットデメリットがあります。 今の質問からは質問者さんが最終的に「何をしたい」のかが見えませんので、ちょっと回答しにくい質問です。 単に具体的なコードを断片的に示すのではなく、そのバックグランドにある「何をしたい」のかについて説明していただいた方が回答がつきやすいかと思います。

100POINT
質問者

補足

説明が不十分で申し訳ございませんでした。 会員認証PHPを改良中ですが、 新規登録のログインIDでディレクトリを作成しその中に別に作成してありますschedule.phpファイルを自動でコピーしたいと思っております。 ログインID/.htaccess     /.htpasswd     /index.php   /schedule.php $indexhtmlを作成まではできていますのでこれを改良して schedule.phpを書き出すことができないか試行錯誤しておりました。 //$indexhtmlを作成 $fp_i = fopen($indexhtml, "w"); flock($fp_i, 2); fwrite($fp_i, "<html>\n<head>\n"); fwrite($fp_i, "<title>$getuserID</title>\n"); fwrite($fp_i, "<meta http-equiv=\"content-type\" content=\"text/html; charset=Shift_JIS\">\n"); fwrite($fp_i, "</head>\n"); fwrite($fp_i, "<body>\n"); fwrite($fp_i, "$getuserID"); fwrite($fp_i, "<hr><br>\n"); fwrite($fp_i, "初期ページ。\n"); fwrite($fp_i, "</body>\n"); fwrite($fp_i, "</html>"); flock($fp_i, 3); fclose($fp_i); fwriteでPHPファイルを書き換えてみましたが文法が長くエラーが出て しまうためschedule.phpをそっくりコピーしてパスワードだけ共有させて ログインID下にコピーできる方法をご教授いただけないかといった事でした。 うまく表現できませんが以上宜しくお願い致します。

  • mikemike7
  • ベストアンサー率87% (97/111)
回答No.2

書き出したファイル側でエラーが発生するという意味ですよね? 8行目 # $の前に\。'の後に; fwrite($fp_i, "$txt = 'test'\n");   ↓ fwrite($fp_i, "\$txt = 'test';\n"); 9行目 # $の前に\ fwrite($fp_i, "print'($txt)';\n");   ↓ fwrite($fp_i, "print '('.\$txt.')';\n"); ""内で$を残して起きたい場合には、$の前に\を記載しなければいけません。 書き出したファイルの中味を見ればどういう状況かわかるはずです。

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

挙げられたコードそのものは問題無く動作しますけど、 どういう「エラー」になるのでしょうか? それが判らないので推測になりますが、ちょっと気になった点をいくつか。 PHPファイルを生成・保存するコードに見えますが、 ---ここから--- fwrite($fp_i, "$txt = 'test'\n"); fwrite($fp_i, "print'($txt)';\n"); ---ここまで--- この部分、$txt は、生成側のコードとして変数展開されますので、 出力するPHPファイル内では ---ここから--- = 'test' print'('; ---ここまで--- という内容になってしまいます。 そうではなく、生成PHPファイル内で変数$txtを使いたいのでしたら、$もクオートして ---ここから--- fwrite($fp_i, "\$txt = 'test';\n"); fwrite($fp_i, "print\"(\${txt})\";\n"); ---ここまで--- にする必要があります。 (それと、 ・上述の1行目では、文が;で終わってないので、;を追加 ・上述の2行目では、シングルクオートで記述されているので変数展開されずそのまま「$txt」という文字列出力になるので、ダブルクオートに変更 ・上述の2行目では、元のままだと「変数名$txt)」と誤認されるので、変数名は「txt」だと明示するために「${txt}」に変更 しています。 以上のコードで、 ---ここから--- $txt = 'test'; print"($txt)"; ---ここまで--- というPHPコードが出力されるようになります。

100POINT
質問者

お礼

ご回答ありがとうございました。 今回は即座に的確なご回答いただき大変助かりました。

100POINT
質問者

補足

ありがとうございました。無事表示できるようになりました。 PHPファイルを書きだそうと思いPHPが動くかのテストでしたが fwriteで1行ずつ書いて行くには長いので 例えば別に s.phpをアップしておいてそれをコピーまたは代入するようにはできないでしょうか?

関連するQ&A

  • ファイルの書込みができません 教えてください

    今 ファイルの書き込みを作成しているのですが。以下のプログラムではテキストの方に書き出しされません。何処が悪いのかわかりません。 わかる方教えてください。 <html> <head> <title>file2</title> <meta http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS"> </head> <body> <?php $file_name="file2.txt"; $fh=fopen($file_name,"w+"); fwrite($fh,"1行目です?n2行目です"); fclose($fh); print "ファイルの書込完了"; ?> </body> </html> ファイルの書込完了とはでるのですが。

    • ベストアンサー
    • PHP
  • これは何を意味しますか?

    <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE></TITLE> </HEAD> <BODY> <img src="./image/2151.jpg"> </BODY> </HTML>

    • ベストアンサー
    • HTML
  • つまらない質問ですが・・・

    fgetsで読み込んだファイルの内容をブラウザーに表示させたいのですが、何も表示されなくて どうしたらよいか、困っています。 解決方法を教えてください。 ソースは以下のようなものです。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>  <title> </head> <body> <?php $j=0; $fp = fopen('time.txt', 'r+'); while(!feof($fp)){ $fileline[$j] = fgets($fp); echo $huleline[$j]; $j++; } ?> </body> </html>

    • ベストアンサー
    • PHP
  • TEXTAREAに入力したタグイメージで保存する方法について

    TEXTAREAに入力した内容で携帯用の画面を作成してます。 TEXTAREAに入力した内容が変換されてTEST.HTMLに出力されてしまいます。 TEXTAREAに入力したタグ内容をそのままTEST.HTMLに出力するには どこを修正すればよろしいのでしょうか? よろしくお願いします。 【TEXTAREAに入力したタグ↓】 <span style=\"color: #ff0000\">12345</span> 【出力したTEST.HTMLの内容↓】 <html><head><meta http-equiv='Content-Type' content='text/html; charset=shift_jis'> </head> <body>&lt;span style=\&quot;color: #ff0000\&quot;&gt;12345&lt;/span&gt; </body> </html> 【ファイル名:abc.php】 <? $head = "<meta http-equiv='Content-Type' content='text/html; charset=shift_jis'>"; //送信情報更新 if($_POST["make"]){ $str = nl2br(htmlspecialchars(mb_convert_encoding($_POST['keitai'], 'SJIS', 'UTF-8'))); $html = <<<HTMLFILE <html><head>$head</head><body>$str</body></html> HTMLFILE; //HTMLファイル作成 $filename="./TEST.html"; //ファイルオープン $fp = fopen($filename, 'w'); if(!$fp){ exit('open err'); } //ファイルのロック処理 flock($fp, LOCK_EX); if(fwrite($fp, $html) === false){ exit('write err'); } fclose($fp); } ?> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <title>画面作成</title> </head> <body> <table> <form action="abc.php" method="post"> <tr> <td>html</td> <td><textarea id="keitai" name="keitai" cols="30" rows="10"><? echo $_POST["keitai"] ?></textarea></td> </tr> <tr><td> <input type="submit" name="make" value="作成"> </td></tr> </form> </table> </body> </html>

    • 締切済み
    • PHP
  • フレームページに文字が表示されなくて困ってます><

    フレームページに文字が表示されなくて困ってます>< フレームページは表示されるのですがmenu.html.htmlやcontents.html.htmlに書いた文字が表示されません どこが間違っているのでしょうか? ーーフレームページーー <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>タトル</TITLE> </HEAD> <FRAMESET cols="100,*"> <FRAME name="menu.html.html" src="file:///D:/happystyle/menu.html.html"> <FRAME name="contents.html.html" src="file:///D:/happystyle/contents.html.html"> <NOFRAMES> <BODY> <P>このページを表示するには、フレームをサポートしているブラウザが必要です。</P> </BODY> </NOFRAMES> </FRAMESET> </HTML> ーーmenu.html.htmlーー <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>タイトル</TITLE> </HEAD> <BODY> 画像置き場 </BODY> </HTML> ーーcontents.html.htmlーー <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>タイトル</TITLE> </HEAD> <BODY> 画像表示 </BODY> </HTML> というHTMLを書きました! フレームに表示させたいページのHTMLはフレームと同じフォルダに入っているのですがこれと関係ありますか? どこがおかしいのかまったくわからないです 教えてください!

  • 連続するecho関数の手間を省く方法

    現在、PHPとCGIを平行して勉強しているのですが、 CGIは printf EOM<< ~ EOM<< のような形で関数1つだけで~の内容を出力できるのに、同様にPHPでやるとエラーになります。 こんな感じです。。。 <?php print EOM<< Content-Type:text/html\n\n; <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>ハロー!PHP!!</TITLE> </HEAD> <BODY> ハロー!PHP!! </BODY> </HTML> EOM<< ?>

    • ベストアンサー
    • PHP
  • あるマルチバイト文字が表示されるまでを削除

    質問させていただきます。 あるテキストファイル(a.txt)があり、そのテキストファイルはマルチバイト(漢字など)文字列です。 この文字列(a.txt)を同階層にある別のHTMLファイルに埋め込みたく思い、 下記のようなHTMLファイルを作成しました。 ====~.html==== <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_Jis"> <meta http-equiv="Cache-Control" content="no-cache"> <title>タイトル</title> </head> <body> <? include "./a.txt"; ?> <br> </body> </html> ====~.html==== そこでこの文字列ファイルを編集後に上記ページで表示させたく思い、 文字列の最初から、最初に"帆"という文字列が表示されるまでの 全ての文字列を削除したいのですが、下記では上手くいきません。 ====mojisakujyo.php==== <? $text1 = "./a.txt"; $fp1 = fopen($text1, "rb+"); ltrim($fp1, "帆"); fclose($fp1); ?> ======== なぜダメなのか解決できません。ご教授願います。

    • ベストアンサー
    • PHP
  • ファイル生成について(C初心者)

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <meta http-equiv="Content-Language" content="ja"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <meta http-equiv="refresh";URL=http://***.**.**/***/***/ABCD001.html"> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> </head> <body> </body> </html> ファイル名=ABCD001.html お世話になります。 上記のようなhtmlファイルがあって http://www.***.**.**/***/***/ABCD001.htmlの ABCD001.htmlの部分だけ変更して新しくファイルを生成しようと思います。 変更する場所のリストはテキストファイル(list.txt)に入っており ABCD001.html~ABCD100.htmlまであります。 そのため最終的には100個のファイルが生成されます。 このようなCのプログラムを作成したいのですが どうやればいいのでしょうか? fwrite・fscanfを使用するのではないかと思いましたが よくわかりませんでした。

  • alphaEDITについて

    alphaEDITの2.0.3 Build 268を愛用しています。 OSは、Win XP SP3です。 今まで、alphaEDITの2.0.3 Build 268でずっとサイトを更新してきました。 しかし、今回起動してみると、以下のような症状が現れました。 起動時 HTMLソースで表示すると、以下のようなタグが表示されます。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <title></title> </head> <body> <p>&nbsp;</p> </body> </html> 一度、WYSIWYGに切り替えて、HTMLソースに戻すと、 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html><head><title></title> <meta http-equiv="Content-Type" content="text/html; charset=shift_jis"> <meta content="MSHTML 6.00.6000.16890" name="GENERATOR"></head> <body> <p>&nbsp;</p></body></html> に変わってしまいます。 今までこのようなことはありませんでした。 iniも消してみましたが、直りません。 設定をいじった記憶もありません。 すみませんが、このような症状の直し方を知っている方がいらっしゃいましたら、 教えていただけないでしょうか

  • html テキストボックスに文字が残って困っています。

    html php 初心者ですよろしくお願いいたします。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta http-equiv="Pragma" content="no-cache"> <title>ひとこと掲示板</title> </head> <body> <form method="get" action="bbs_form.php"> <input type="text" name="content" size="60"> <input type="submit" value="送信"> </form> <hr> <?php $contents = file_get_contents('aaaa.txt'); print($content); $content = htmlspecialchars($_GET['content']); if ($content) { $contents = "$content<hr>\n$contents"; $fp = fopen("aaaa.txt", "a"); @fwrite( $fp, "$content"."/"); fclose($fp); } $c=0; for($a = 0 ; $a != 10000 ; $a++){ $ss = mb_substr($contents,$c,1); if($ss == "/"){ print("<br><hr />"); } else{ print($ss); } $c++; } $content = ""; ?> </body> </html> このプログラムでテキストボックスに値を入力します。 そしてf5で更新を押すとキャッシュがのこってるせいなのか、 入力していないはずのテキストボックスに値がのこりつづけます。 その値を消してクリアにしたいのですが、 いい方法はありませんでしょうか? よろしくお願いいたします。

専門家に質問してみよう