2017-09-21 27 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

只需添加一个调试提示:下次尝试添加回显以查看您的路径的实际值,然后再询问SO。 –

+0

也很好的建议,我更新,包括一个更好的方式来编码,因此它可以与回声调试等。 – Lizardx