2017-09-21 24 views
0

だから私のコードは、エラーメッセージが表示され続けますが、許可は必要ですが、何か考えていませんか?PHPファイル書き込み - 毎回のエラーメッセージ

<?php 
//create variables 
$first_name = (int) $_POST['first_name']; 
$last_name = (int) $_POST['last_name']; 
$document_root = $_SERVER['/var/www']; 
$date = date('H:i, jS F Y'); 
?> 
<DOCTYPE html> 
<html> 
<head> 
    <title>We get the message...</title> 
</head> 
<body> 
    <h1>We get the message . . .</h1> 
    <?php 
     $output_string = $date."\t".$first_name.$last_name." \t".$message."\n"; 
     @$fp = fopen("$document_root-messages.txt", 'w+'); 
     if (!$fp) { 
      echo "<p>apologies</p>"; 
      exit; 
     } 
     flock($fp, LOCK_EX); 
     fwrite($fp, $output_string, strlen($output_string)); 
     flock($fp, LOCK_UN); 
     fflush($fp); 
     fclose($fp); 

     echo "<p>message written.</p>"; 
    ?> 
</body> 
</html> 

私はちょうどそれはおそらく、本当にシンプルなものですので、PHPを学ぶために始めているが、私は今、一時間ほど私の頭を悩まてきたし、まだ解決策を考え出すていません。

+0

フォルダに必要な権限があることを確認してください。 – PekosoG

+0

'/ var/www-messages.txt'というファイルに書いているようです。私はそれが '/ var/www/messages.txt'であると仮定していますか? '$ fp = fopen(" $ document_root/messages.txt "、" w + '); 'エラー抑止' @'を取り除いたことに気付きました。 –

+0

それが実際にあなたの意図だった場合、Webサーバーが '/ var'に直接アクセスできるようにすることは非常に危険です。 '/ var/www 'の中に書いても非常に危険です。他のすべてのファイルは明示的にWebサーバーユーザーによって書込み不可能にする必要があります。 –

答えて

0
@$fp = fopen("$document_root-messages.txt", 'w+'); 

あなたが実際にパスをしなかった、などのファイル一切ありません。

/var/www-messages.txt 

は、これが今実際のパスです:

@$fp = fopen("$document_root/messages.txt", 'w+'); 

そして、私はあなたが何を意味するかと想定されます/ var/wwwにあるファイルがmessage.txtであると仮定します。

/var/wwwを書き込み可能にするという悪い習慣についてのコメントも正しいです。悪いものから始めれば、とにかくそれを放棄しなければならないので、良い慣行で始めることを学ぶときは最高です。より多くの仕事。

これを回避する方法は、ちょうどそうのような、より明確であることに慣れることです。そして、あなたはそれが働いているの後にエコーを取り除く

$file_path = $document_root . '/messages.txt'; 
echo $file_path . '<br>'; 
@$fp = fopen($file_path, 'w+'); 

は、エコーも良いアドバイスです。あなたが何かの内部のすべてのアクションを詰め込むことに慣れているならば、あなたはfopenの外にあなたの文字列を構築すると、デバッグするのが非常に難しく、次にそれをエコーすることによってパスをデバッグすることができます。どの程度明確で、どのようにデバッグするのが簡単か分かりますか?

+0

ちょうどデバッグのヒントを追加するだけです:次回は、あなたのパスの実際の値を見るためにエコーを追加してみてください。 –

+0

また、良いアドバイス、私はそれがエコーなどでデバッグすることができるようにそれをコードするためのより良い方法を含めるように更新されました – Lizardx

関連する問題