【问题标题】:fopen create new file that not existsfopen 创建不存在的新文件
【发布时间】:2011-02-03 04:03:06
【问题描述】:

我正在尝试创建一个不存在的文件或写入一个已经存在的文件。

在一个 php 文件中我正在尝试这个:

$file = fopen("data.txt", "a");

fwrite($file, "\n" . $name); fwrite($file, "," . $lastname);

fwrite($file, "," . $email);

fclose($file);

我在 Windows Xp 下运行 Apache,但没有成功创建文件“data.txt”。文档说添加 a 参数应该创建一个名称在第一个参数(data.txt)中提到的文件。我在这里拧干什么呢?

提前致谢 欠佳

【问题讨论】:

    标签: php windows apache fopen


    【解决方案1】:

    如果附加到已经存在的 data.txt 有效,但没有创建尚不存在的文件,则很可能意味着文件权限允许写入其中,但文件所在的文件夹不属于Apache,因此它不能在那里创建文件。

    【讨论】:

      【解决方案2】:

      让我们在代码中添加一些测试和调试输出

      echo 'cwd is: ', getcwd(), "<br />\n";
      echo 'target should be: ', getcwd(), "/data.txt <br />\n";
      echo 'file already exists: ', file_exists('data.txt') ? 'yes':'no', "<br />\n";
      
      $file = fopen("data.txt", "a");
      if ( !$file ) {
        die('fopen failed');
      }
      $c = fwrite($file, "\n$name,$lastname,$email");
      fclose($file);
      echo $c, ' bytes written';
      

      【讨论】:

        【解决方案3】:

        请记住,该文件是在进程的主线程运行的目录中创建的。这意味着如果“主”程序在 A/ 中,并且它包含来自 B/ 的函数文件,则 B 中的函数会在“.”中创建文件。在 A/ 中而不是在 B/ 中创建它

        另外,fwrite函数不需要调用3次,你可以这样做

        fwrite($file, "\n" . $name . ", " . $lastname . ", " . $email);
        

        【讨论】:

        • 你实际上可以把它写成
           fwrite($file,"\n$name, $lastname, $email"); 
        【解决方案4】:

        您是否正在查看脚本也认为它是当前目录的目录?你的apache进程在那里有写权限吗?错误日志中是否提到了任何失败的命令?

        【讨论】:

        • 您好康拉德纽沃斯,感谢您的回复。您是否正在查看该脚本也认为它是当前目录的目录?不知道这个函数是如何工作的,我期待它搜索当前目录我如何检查我是否有写权限,我在 windows XP 下运行 localhost 服务器,Apache,并且没有任何经验。错误日志/访问日志没有提及任何内容
        • 您可以使用getcwd() 获取脚本的当前工作目录。此外,您应该在 fopen() 调用之后检查if ($file === FALSE) { etc...}。如果脚本由于任何原因无法打开文件,则返回 false。
        猜你喜欢
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-26
        • 2014-06-27
        • 1970-01-01
        • 2017-10-19
        • 1970-01-01
        相关资源
        最近更新 更多