PHPのエラーメッセージ

このQ&Aのポイント
  • HTML文書からPHPに送ったファイル名のついたファイルをunlink()関数で削除しようとしている際にエラーメッセージが発生する
  • エラーメッセージが示すQAgameOver.phpというファイルをPHPが見つけられない
  • エラーメッセージの原因は、PHPが指定されたファイルをhtdocsのルートとして探しているため
回答を見る
  • ベストアンサー

PHPのエラーメッセージ

HTML文書からPHPに送ったファイル名のついたファイルをunlink()関数で削除しようとしているのですが、添付したスクリーンショットのようなエアーメッセージが出てきて進めません。 PHPのコードは下のようなものです。 <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title> QAdeleteFile.php</title> </head> <body> <?php $FileName=$_POST["deleteFileName"]; $FileName="C:\\xampp\\htdocs\\".$FileName; echo $FileName ; unlink($FileName); echo "<form id='next' method='POST' action='QAgmeOver.php' >"; echo "<input type='submit' value='call QAgameOver' >"; echo "</form>"; ?> <!-- <script type="text/JavaScript"> window.document.getElementById("next").submit(); </script> --> </body> </html> エラーメッセージで言っているQAgameOver.phpというのは上に挙げたコードのプログラムです。このメッセージでは、PHP はそのファイルをこのプログラムの中で探そうとしているように見えますが、そのファイルは当然ローカルサーバーのルートであるhtdocs の中に置いてあります。 なぜこうなるのでしょうか?詳しい方、どうか教えてください。

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

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

  • ベストアンサー
  • 4017B
  • ベストアンサー率73% (1305/1776)
回答No.2

あ~やっぱり…回答を書いてて何となく失敗するんじゃないかと思ってました。PATH問題は初心者がハマりやすい落とし穴なんで。 とりあえず問題点を明らかにするため、以下のコードを書き足して実行させてみてください。 $my_file = $_POST['deleteFileName']; $my_file = $_SERVER['DOCUMENT_ROOT'].'/'.$my_file; var_dump( $my_file ); これでPHPプログラム内部で $my_file にどんなURL(PATH)が格納されているかが分かります。それを確認した上で、実行するPHPコード内でどの様にURL等を加工すれば良いのかの方針が見えて来ます。

papashiroSooke
質問者

お礼

何度もお世話いただき、有難うございます。 アドバイス頂いた3行を挿入したところ、ファイルは削除されました。 var_dump()関数の結果も思った通りのファイルパスになっています。 しかし不思議なことに、「そんなファイルは存在しない」旨のメッセージ がまだ出てきます。後はこれを消す方法がわかればよいのですが、何かアイデアはございますか?お手数をかけて申し訳ありませんが、ご存知でしたらよろしくお願いいたします。

papashiroSooke
質問者

補足

お礼コメント欄でお願いした、「そんなファイルは存在しない」メッセージの消し方については、それを無視して次のページに行くようにしましたので、お忘れください。 色々有難うございました。

その他の回答 (1)

  • 4017B
  • ベストアンサー率73% (1305/1776)
回答No.1

XAMMP内部でのパスが単純に通ってないだけですね。 - Windows上でのファイルPATH: - "C:\\xampp\\htdocs\\hoge\\abc.jpg" - XAMPP上でのファイルPATH: - "http://localhost/hoge/abc.jpg" ~みたいになるので。 とりあえず、 $FileName = $_SERVER['DOCUMENT_ROOT'].'/'.$FileName; ~と修正して試してみてください。それでダメだったら、 $FileName = __DIR__ .'/'. $FileName; ~とかも試してみてください。 P.S. XAMMPはWindowsやMacなどのUNIX系以外のOS上に仮想Linux(UNIX)環境を構築してエミュレートする総合ソフト環境です。従ってXAMMP内ではXAMMPが支配するLinuxのルールに従って全てを処理して行く必要があります。XAMMP、もといLinux環境でのファイルのPATHは httpdocs の設定に依存しますので、これらを用途に応じた適切で正しい設定を記述し編集出来る知識と能力が必須となります。Windowsの基本的なルールやセオリーが全く通用しなくなるので、ある程度の慣れと注意が必要です。

papashiroSooke
質問者

お礼

早速にご回答いただき、有難うございます。 4017Bさんにはこれに関連する前の質問にも回答いただき、本当にお世話になっています。 アドバイス頂いた方法を二つとも試してみましたが、いずれもうまくいきませんでした。 PATHの記述など、XAMPPの使い方もよくわかってなかったみたいなので、自分でもよく勉強をして、解決の糸口を探したいと思います。

関連するQ&A

  • PHPの syntax error について

    PHPのコードを書いて、添付のスクリーンショットのようなエラーが出てきます。 コードは次のようなもので、HTML文書のフォームから送られてきた名前のファイルを消去するものです。 <body> <?php $FileName=$_POST["deleteFileName"]; $FileName="C:\xampp\htdocs\".$FileName; echo $FileName ; unlink($FileName); //echo "<form id='next' method='post' action='QAgmeOver.php' >"; //echo "<input type='submit' value='call QAgameOver' >"; //echo "</form>"; ?> <!-- <script type="text/JavaScript"> window.document.getElementById("next").submit(); </script> --> </body> 問題の line 18 というのは次の行です。 //echo "<form id='next' method='post' action='QAgmeOver.php' >"; unexpected T_STRING というのは、何か文字列の書き方に問題があるということらしいのですが、何をどうやって見てもエラーが消えないのでコメントアウトしてみましたが、それでも同じエラーメッセージが出てきます。 どうすればこのエラーが出なくなるのか、詳しい方がいらっしゃいましたら教えてください。お願いいたします。

    • ベストアンサー
    • PHP
  • PHPをはじめて1日目なので・・・

    参考書を見ながらPHPの勉強を始めていますが、本のサンプルと全く同様にコーディングしているはずなのに、良い結果が得られずバグとなります。 formとpostを使って内容を渡すという項目なのですが。 form.htmlの内容。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form method="post" action="form1.php"> 好きな食べ物は?<input type="text" name="food1"><br> 好きな飲み物は?<input type="text" name="food2"> <input type="submit" value="送信"> </form> </body> </html> form1.phpの内容 <?php header('Content-type: text/html; charset=UTF-8'); ?> <html> <body> <?php $f1 = $_POST['food1']; $f2 = $_POST['food2']; $f1 = htmlentities( $f1, ENT_QUOTES, 'UTF-8' ); $f2 = htmlentities( $f2, ENT_QUOTES, 'UTF-8' ); echo 'あなたは「', $f1, "」が好きなんですね。<br>\n"; echo '「', $f2, "」も好きなんですね。<br>\n"; ?> </body> </html> おそらくちょっとしたことが原因でエラーが出ているのだと思いますが、まだ始めて1日目なので、どこがいけないのかさっぱりわかりません。 一体どこがおかしいのか、教えていただけますか?

    • ベストアンサー
    • PHP
  • PHPのPHP_SELFに絡む設定を教えてください

    PHPを勉強中なのですが、以下のソースをSubmit(value=更新)処理すると 結果がURLが見つからない「ページを表示できません」がでます。 恐らく、「PHP_SELF」に絡む設定か、「localhost」のPathに問題があると思うのです。 何かの設定が抜けていると思うのですが、色々調べても分かりません。 どこの設定を直せばいいか教えてください。(^^ 【書籍】 ホンキで学ぼう!PHPのキホン 【環境】 OS:WindowsXPHomeEdition Apapche:1.3.26 PHP:4.2.3 【URL結果】 最初にPHPにアクセスしたときのURL:http://localhost/tmp/php/fileedit.php SubmitしたときのURL:http://tmp/php/fileedit.php 【ソース】書籍の抜粋 <? $filename = "todo01.txt"; if ( $submit ) { $backupfile = $filename.".bak"; echo $backupfile; if ( copy($filename, $backupfile) ) { $fp = fopen($filename, "w"); if(flock($fp, 2)){ fputs($fp, $contents); flock($fp, 3); }else{ echo "ERROR: file lock is failed.<BR>\n"; exit; } fclose($fp); }else{ echo "ERROR: backup failed.<BR>"; exit; } } // ファイル書き換え部終わり ?> <HTML> <HEAD> <TITLE> <? echo $filename ?> </TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=euc-jp"> </HEAD> <BODY> <FORM ACTION="<? echo $PHP_SELF; ?>" METHOD="POST"> <TEXTAREA NAME="contents" ROWS="25" COLS="100"> <? require ( $filename ); phpinfo(); ?> </TEXTAREA> <INPUT TYPE="submit" NAME="submit" VALUE="更新"> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • zampp  PHPでPOSTの変数が返ってこない

    お世話になります。 PHPを最近はじめたばかりの初心者です。 zampp をインストールし、Apache、PHPの動作は問題なく動いています。 「sample.html」「sample.php」の2つファイルを作成し、 C:\xampp\htdocsに保存しました。 「sample.html」と「sample.php」は、ある本からサンプルコードです。 ------------------- 「sample.html」 ------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>sample page</title> </head> <body> <h1>フォームサンプル</h1> <form method="post" action="sample.php"> <input type="text" name="text1"> <input type="submit"> </form> </body> </html> ------------------- 「sample.php」 ------------------- <?php $str = $_POST['text1']; if ($str != ""){ $msg = "あなたは、「{$str}」って書いたね?"; } else { $msg = "何も書いてなかったよ?"; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>sample page</title> </head> <body> <h1>結果表示</h1> <div><?php echo $msg; ?> </body> </html> ------------------------------------ htmlファイルをブラウザーで開き、submit(送信ボタン)を押すと、 text1に入力した文字が、返ってきて .phpに表示されなければならないのですが、 .phpでブラウザーに表示されるのは、上記のコードがそのまま表示されてしまいます。 (入力した文字も代入されずに、コードのまま表示されます) 上記のコードとは違う、htmlファイルとphpファイルで動作させても コードがそのまま表示されて、$_POSTがうまいきません。 原因が分からずに困っています。 ご教授いただけますよう何卒よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpのフォーム入力で

    phpの勉強初日なのですが、さっそくつまづいてしまいました。 買った本に沿って、簡単なフォーム入力のhtmlファイルと、 その処理のphpファイルを下記のように作ってみたのですが、上手く行きません。 htmlのフォームからのpostは出来ているようなのですが、 phpファイルがコールされると、phpファイルのソースがそのまま表示されてしまって、 postした文字列がechoされません。。。 初日でつまづいてしまっていきなり挫折しそうです。。。 どなたかお詳しい方、お教えいただけると幸いです。 ■input.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>input</title> </head> <body> <form action="inputphp.php" method="post"> <label for="my_name">お名前:</label> <input id="my_name" type="text" name="my_name" size="15" maxlengh="255" value=""/> <input type="submit" value="送信"/> </form> </body> </html> ■inputphp.php <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>inputphp.php</title> </head> <body> <?php print($_REQUEST['my_name']); ?> </body> </html>

    • ベストアンサー
    • PHP
  • phpの表示がおかしいのですが。

    phpの基礎をしているのですが、 phpファイルに下記のように書き込み <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"><head> <meta http-equiv="Content-type" content="text/html; charset=EUC-JP"> <meta http-equiv="Content-Style-Type" content="text/css"> <link rel="stylesheet" href="../style.css"> <title>画面に文字を表示させる</title></head> <body><div class="file2"> <!--ここから form形式で文字を入力します。送り先(action)はこのファイル--> ここに文字を入れて表示ボタンを押してね。<br> <form action="01_01_send.php" method="post"> <input type="text" name="data" size="30"> <input type="submit" value="表示!"></form> <!--ここからPHPが始まります。//--> <?php error_reporting(1); $data = $_POST["data"];/*$dataという変数に、form action で送られた data を代入します*/ $data = htmlspecialchars($data, ENT_QUOTES);//タグを無効化 echo $data;/*画面上に $data すなわち入力された文字を表示します*/ $filepointer=fopen("./send/send.txt", "a+"); flock($filepointer, LOCK_EX); fputs($filepointer, $data."\n"); flock($filepointer, LOCK_UN); fclose($filepointer); ?> <!--これでPHPは終わりです。//--> </div></body></html> phpファイルを保存した場所はc:xammp/htdocs/test/です。htdocs内にtestフォルダを作成しindex.phpファイルとし, http://localhost/test/ で読み込みました。 画像ファイル2のようにnot found objectとなります。 これはローカル環境でするには正常なのでしょうか?それとも何か記述方法が間違っているのでしょうか?説明不足かもしれませんがよろしくお願いします。

    • 締切済み
    • PHP
  • フォームから受け取ったデータを変数に/PHP

    入力フォームからデータを送信し、受け取ります。 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> この時に受けったデータが、「りんご」だとして この「りんご」を変数にしたいです。 ↓ <?php $keyword = "りんご"; ?> このようにするには、 <form action="index.php" method="post"> <input type="text" name="hoge"> <input type="submit"> </form> <?php echo htmlspecialchars($_POST['hoge']); ?> の後にどのような処理をすればよいでしょうか? または初めから「$keyword」としてフォームからデータを送ることはできるのでしょうか? 何卒ご指導の程よろしくお願いします。

    • ベストアンサー
    • PHP
  • phpを挑戦している中でのエラーメッセージについて

    初期の学び中の者です。 Parse error: syntax error, unexpected T_STRING in C:\xampp\htdocs\check.php on line 51 とでるのですが、何回みなおしてもエラーを見つけることができません。 line 51、というのは下記のです。(50行に余分の「’」が入っていたのですが、それを修正しましたが、51にあるメッセージです)。 print'<input type="button" onclick="history.back()" value="戻る">'; よろしくお願いいたします。 -------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PHP基礎</title> </head> <body> <?php $nickname=$_POST['nickname']; $email=$_POST['email']; $goiken=$_POST['goiken']; if($nickname=='') { print'ニックネームが入力されていません。<br />'; } else { print'ようこそ'; print $nickname; print'様'; print'<br />'; } if($email=='') { print'メールアドレスが入力されていません。<br />'; } else { print'メールアドレス'; print $email; print'<br />'; } if($goiken=='') { print'ご意見がが入力されていません。<br />'; } else { print'ご意見'; print $goiken; print'<br />'; } if($nickname==" || $email==" || $goiken==") { print'<form>'; print'<input type="button" onclick="history.back()" value="戻る">'; print'</form>'; } else { print'<form method="post" action="thanks.php">'; print'<input type="button" onclick="history.back()" value="戻る">'; print'<input type="submit" value="OK">'; print'</form>'; } ?> </body> </html> --------

  • ファイル間のデータの受け渡しについて hidden? session?

    1.php (フォームを表示) 2.php (入力内容の確認ページ) 3.php (最後のページ、送られた値を使用し、メール送信やデータベースに書き込むなどの処理をしたい。) とhiddenを使い、3つのファイルを作成しました。 ファイル"1.php" <!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> <form action="2.php" method="post"> <input type="text" name="data1" value="データその1"> <input type="hidden" name="data2" value="隠しデータ"> <input type="submit" name="" value="送信"> </form> </body> </html> ファイル"2.php" <?php echo "<h1>確認ページ</h1>"; echo $_POST[data1]."<BR>"; echo $_POST[data2]; print<<<_HOGE_ <form action="3.php" method="post"> <input type="hidden" name="data1" value="$_POST[data1]"> <input type="hidden" name="data2" value="$_POST[data2]"> <input type="submit" name="" value="送信"> </form> _HOGE_; ?> ファイル"3.php" <?php echo $_POST[data1]."<BR>"; echo $_POST[data2]; ?> 2.phpの(入力内容の確認ページ)を見ているときに、他の人が2.phpにアクセスして入力内容を盗み見る事は出来るのでしょうか? (2.phpに直接アクセス出来ないように、リダイレクト処理はするつもりですが。) 2.phpから3.phpに値を渡す場合、このようなhiddenの使い方は間違っていますか? セッションを使った方が良いのでしょうか?

    • ベストアンサー
    • PHP
  • php -> javascript 変数渡し

    tempフォルダにtest.txtファイルが存在すれば、 fileフォルダaaa.txtファイル名をbbb.txtファイルに変更という流れです。 変更ボタンをクリックすると、値を$testdataに渡し、ファイル有無をチェックし、ある場合は変数をjavascriptに渡すしますphpの所は問題ありませんが、 javascript処理の所がどうしてもうまくいきません。変数渡しができません。 ネット上でいろいろ調べてみましたがすべてダメでした。 ぜひ、よろしくお願いいたします。 下記はそのコードです。 ファイル名test.php <? $testdata = $_GET["testdata"]; $filename = "C:\\xampp\\htdocs\\test\\file\\temp\\".$testdata; if(file_exists($filename)){//ある場合、変数をjavascriptに渡す $testdata_script = $testdata; }//ここまでは問題ありません。 ?> <!-- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> --> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>テスト</title> <script type="text/javascript"> <!-- function test(file) {       obj = new ActiveXObject('Scripting.FileSystemObject'); var name = '<?php echo $testdata_script ;?>'; alert(name); strMoveFrom = 'C:\\xampp\\htdocs\\test\\file\\aaa.txt'; strMoveTo = 'C:\\xampp\\htdocs\\test\\file\\bbb.txt'; obj.MoveFile(strMoveFrom ,strMoveTo ); obj= null } //--> </script> ...省略 <form action=test.php method=get accept-charset=UTF-8> <input type=submit value=変更 onclick=test('file')> <input type=hidden name=testdata value="test.txt">

専門家に質問してみよう