【发布时间】:2014-04-01 17:55:06
【问题描述】:
你好 stackoverflow 社区!
我需要一些帮助来了解我在哪里出错了。
情况:在我正在构建的网站上,我有一个部分,其中包含用户填写姓名、食物选择和过敏情况的表格。我在 IIS 7 上使用 php 5.5,并有一个表单提交给名为 form.php 的 PHP 页面。一旦他们填写表格并提交,它会将他们带到 php 页面,在该页面中表示感谢您提交,等待 5 秒并将其返回到上一页。
我已经确认通过将它们输出到变量并在屏幕上回显以及使用var_dump($_POST);来收集发布的值和键没有问题
这是我的表单代码:
<form action="form.php" method="post">
<p>First Name: <input type="text" name="fname"></p>
<p>Last Name: <input type="text" name="lname"></p>
<p>Food selection:
<select name="food">
<option value="no_selection">---Please Select---</option>
<option value="chicken">Chicken</option>
<option value="beef">Beef</option>
<option value="corn">Corn</option>
</select>
</p>
<p>Allergies:<input type="text" name="allergies"></p>
<hr />
<input type="submit" value="Submit" />
</form>
这是我要输出到 CSV 的 PHP 代码:
<?php
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$fullname = $_POST['fname']." ".$_POST['lname'];
$food = $_POST['food'];
$allergies = $_POST['allergies'];
$currentData = array($fname,$lname,$food,$allergies);
$file=fopen('food.csv', 'a');
fputcsv($file, $currentData);
fclose($file);
?>
没有文件被创建或写入,当我手动创建文件并将其放置在目录中时,它仍然不会写入它并且它确实具有文件的完全权限。我检查了服务器,也不是文件锁定问题。
非常感谢任何帮助!让我知道是否还有其他需要帮助的地方。
提前致谢!
编辑答案:
太棒了!感谢 Darragh 推荐 is_writable() 功能。这有助于我了解我做了什么,没有权限以 php 用户(IIS 中的 IUSR)写入。
还要感谢 greg0ire 和 Spechal 提供有关使用错误日志设置进行调试的提示。
答案肯定是权限问题,因为我将 IUSR 作为文件夹根目录的读/写,但继承被关闭,因此子文件夹和文件无权访问。
除了权限问题之外,Spechal 提到在写入数据之前内爆数据是一个好问题(但不是我的目的,因为 fputcsv 完成了与逗号分隔相关的所有工作),特别是如果你想改变分隔符。
感谢大家快速而有帮助的回复!
【问题讨论】:
-
您可能设置了不正确的权限。您可以使用
is_writable():php.net/manual/en/function.is-writable.php 检查(并使您的代码更健壮) -
您是否看到任何错误消息?如果没有,您的 php 安装是否配置为显示错误?
-
我现在正在研究
is_writable()函数,看看这是否有助于缩小问题的范围。我将 php.ini 设置为显示错误,但我在上面发布的 php 代码位于<body>标记内,该标记还打印出其他数据。主要是感谢提交!显示正常的段落。 5 秒后将浏览器重定向回来的 javascript 代码也是如此。 -
尝试设置完整路径而不是相对路径,看看会发生什么。很有可能它正在创建文件并成功写入,只是在与您期望的不同的地方