我根据this安装了自己的LAMP。我的是Ubuntu 17.10而不是16.04,但我看不出它应该有所作为。
我已根据this设置所有权和权限。
这是我的index.php:
<?php
if($_POST['statusFormSubmit'] == "Submit")
{
alert("in php");
$varStatus = $_POST['statusInput'];
alert("$varStatus");
$path=$_SERVER['DOCUMENT_ROOT'] . '/mydata.csv';
$fs = fopen($path, "a");
alert("file $path");
fwrite($fs, $varStatus . ", " . $varStatus . "\n");
fclose($fs);
header("Location: thankyou.html");
exit;
}
function alert($msg) {
echo "<script type='text/javascript'>alert('$msg');</script>";
}
?>
<html>
<head >
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
<title >Form page: status</title>
</head>
<body>
<h1>Your status:</h1>
<form id='form_status' method='post' action='index.php' >
<p>
<input type='text' name='statusInput' maxlength="140" value="<?=$varStatus;?>">
</p>
<p>
<input type='submit' name='statusFormSubmit' value='Submit' />
</p>
</form>
</body>
</html>
和thankyou.html,如果你必须看到它。这里:
<html>
Thank you for submitting!
</html>
我在浏览器中打开localhost/index.php
,我通常使用&#34; asdf&#34;填写该字段,转到感谢页面...但没有创建文件。哪里出错了?
顺便提一下,javascript警报也没有显示出来(我认为他们在其他地方有文件时就这样做了,没有涉及到apache)。对此的任何解释也是受欢迎的。
使用this添加更多调试信息,我得到的路径不存在(正确),不可读也不可写(似乎合乎逻辑)
Warning: fopen(/var/www/html/mydata.csv): failed to open stream: Permission denied in /var/www/html/index.php on line 18
last error: array(4) { ["type"]=> int(2) ["message"]=> string(73) "fopen(/var/www/html/mydata.csv): failed to open stream: Permission denied" ["file"]=> string(23) "/var/www/html/index.php" ["line"]=> int(18) }
我对路径的权限是(剪切):
$ ll /
drwxr-xr-x 15 root root 4.0K Mar 13 15:32 var/
$ ll /var
drwxr-xr-x 3 root root 4.0K Mar 18 17:01 www/
$ ll /var/www
drwxr-sr-x 2 gauthier www-data 4.0K Mar 22 22:08 html/
我们有了它,该组没有写权限,我猜是apache需要创建该文件。
正确的方法是什么,给g+w
?在目录中创建文件?其他