どうしてもエラーになってしまいます
どこが間違っているかお教え頂けませんでしょうか
宜しくお願い致します
$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>");
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 行を追加していけば、
ユーザー毎に生成するファイルに対する内容置き換え項目の追加ができます。
この回答への補足
今回教えていただきました件で
>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>";
---
しかし何も表示されませんでした。
アドバイスいただけますと助かります。
mtaka2様
今回のご指導いただきましたもので上手くいきました。
index.phpをschedule.phpに置き換えまして当初希望のことも無事完了できました。
超初心者の私にもよく分かるようご説明下さり感謝いたします。
スキルを上げるよう努力致します。
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 関数の呼び出しだけで実現できます。
この回答への補足
ご教授ありがとうございます。
しかしながら私のスキルでは難しいようですので
$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);
以上宜しくお願い致します。
No.3
- 回答日時:
補足について
> 別にs.phpをアップしておいてそれをコピーまたは代入するようにはできないでしょうか?
出来るか出来ないかといえば「出来る」が答えになりますが、その実現方法はいくつもあり、それぞれメリットデメリットがあります。
今の質問からは質問者さんが最終的に「何をしたい」のかが見えませんので、ちょっと回答しにくい質問です。
単に具体的なコードを断片的に示すのではなく、そのバックグランドにある「何をしたい」のかについて説明していただいた方が回答がつきやすいかと思います。
この回答への補足
説明が不十分で申し訳ございませんでした。
会員認証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下にコピーできる方法をご教授いただけないかといった事でした。
うまく表現できませんが以上宜しくお願い致します。
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");
""内で$を残して起きたい場合には、$の前に\を記載しなければいけません。
書き出したファイルの中味を見ればどういう状況かわかるはずです。
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コードが出力されるようになります。
この回答への補足
ありがとうございました。無事表示できるようになりました。
PHPファイルを書きだそうと思いPHPが動くかのテストでしたが
fwriteで1行ずつ書いて行くには長いので
例えば別に
s.phpをアップしておいてそれをコピーまたは代入するようにはできないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでテキストファイルに保存した時の改行問題 1 2022/11/19 15:07
- C言語・C++・C# #include <stdio.h>int main(void) { int buf[100] = 6 2022/11/01 22:45
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# 100バイトのバイナリファイルを読み込んで別のファイルに書き込みたいのですが、型をどうすればいいのか 1 2022/11/03 17:11
- PHP PHPのエラーの解消法について教えて下さい。 1 2023/02/06 10:48
- C言語・C++・C# C言語について教えて欲しいです。 ファイルの中身をコピーするプログラムを作ってます aというファイル 7 2022/11/03 19:21
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- HTML・CSS html cssのmargin 5 2022/12/03 11:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日本語が文字化けしないよう読...
-
PHP 読み込んだファイルのブラ...
-
PHPでFilename cannot be empty...
-
こちらはただの直列処理ですか?
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
form actionで二つ送信先を指定...
-
シェルスクリプトからphpファイ...
-
FTPコマンドでディレクトリごと...
-
PHPのif文でその処理を途中で抜...
-
存在しないメールアドレスかど...
-
.htaccessにphp_valueが使用できな
-
PHP8を使うと、大量のWarningが...
-
PHPでfatal errorが出ても無視...
-
アップロード画像数でCSSを分け...
-
Apacheでhttp://localhost/が表...
-
別ファイルの変数を呼び出した...
-
FORMで送信ボタンと戻るボタン...
-
sqlで日付が一番古いデータの月...
-
php5のrename()は日本語をリネ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
値の取り出し方について教えて...
-
2つの画像ファイルが異なるファ...
-
PHPでFilename cannot be empty...
-
ファイル名は、数字の「0」(...
-
stat failed
-
ファイルの行数取得
-
TSVファイルをCSV形式に変換したい
-
日本語のファイルが開けない
-
XMLのロードに失敗する
-
別のサーバにあるファイルの存...
-
PHP+MySQL でのcsvファイルイン...
-
日本語のデータが文字化けをし...
-
日本語が文字化けしないよう読...
-
PHPでの別のサーバーのテキスト...
-
phpメールフォームから送信・登...
-
PHP、ファイルロックの失敗で消...
-
PHP5のsimplexml_load_fileで取...
-
PHPでAPI 出力はCSVを取得する...
-
PHPでテキストファイルかどうか...
-
PHPで特定の文字列のみ抽出し、...
おすすめ情報