こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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 というのは、何か文字列の書き方に問題があるということらしいのですが、何をどうやって見てもエラーが消えないのでコメントアウトしてみましたが、それでも同じエラーメッセージが出てきます。
どうすればこのエラーが出なくなるのか、詳しい方がいらっしゃいましたら教えてください。お願いいたします。

投稿日時 - 2018-10-14 09:04:42

QNo.9547442

すぐに回答ほしいです

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

4行目の

$FileName="C:\xampp\htdocs\".$FileName;

の \ を全て

$FileName = "C:\\xampp\\htdocs\\".$FileName;

~という風に修正すれば通る様になると思います。

P.S.
\ (日本語の¥マーク) はPHPコード内では出現場所の如何に関わらず常にエスケープ文字として機能するため、うっかり癖でローカル内ファイルへのURL(Windows風PATH)を記述してしまうと。ディレクトリ階層の区切りを示す「\ (¥)」がエスケープ文字と判断され、例文の $FileName へ代入された文字列は実際には C:xampphtdocs".$FileName;~(これ以降の改行も含む全ての記述が1つの文字列と判断されている)~という風になるため。

エラー表示で9行目と出るのは、4行目で発生したエスケープ処理の間違いにより、$FileName="" の終末を意味する " が「PHPプログラムとして正しい意味で次に最初に登場する部分」が9行目の echo "~の部分になるため。そこまでを1つの文字列として処理してしまうからです。

このため echo "~以降の部分から改めてPHPプログラムとしてサーバ側が解釈しようとしますが…

<form id='next' method...

~なんてPHPプログラムは存在しないため、そこでエラーになって止まるのです。

投稿日時 - 2018-10-14 11:36:38

お礼

早速にご回答を頂き、有難うございます。
ご忠告の通りに"\"を "\\" にしてみたらファイル名を渡すことが出来ました。
しかし今度は、「そんなファイルは存在しません」というメッセージが出てきました。 これはまた別の件として質問させていただきます。
もしよかったらそちらの方にもご回答いただけると有難いです。

投稿日時 - 2018-10-14 12:48:45

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問