PHP fputcsv - 没有创建或追加文件


PHP fputcsv - no file created or appended to

嗨,堆栈溢出社区!

我需要一些帮助来了解我在这里出错的地方。

情况:在我正在构建的网站上,我有一个包含表单的部分,用户填写了姓名、食物选择和过敏。我在 IIS 5.5 上使用 php 7,并且有一个 PHP 页面,表单提交到称为 form.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 完成了与逗号分隔相关的所有工作),特别是如果你想改变分隔符。

感谢大家的快速和有用的回复!

检查以下内容以进行开发:

在 php.ini: display_errors = On error_reporting = E_ALL | E_STRICT

您需要检查以确保要写入的路径实际上是可写的。还应使用绝对路径而不是相对路径。

您可能还想在编写之前用逗号内爆您的$currentData。