【问题标题】:Getting fopen/fwrite to write to different directory让 fopen/fwrite 写入不同的目录
【发布时间】:2026-02-01 01:35:01
【问题描述】:

我需要写文本文件,我试试这段代码

public function ResultsTrackingLogs( $event, $message ) {
$logsDir = dirname( __FILE__ ) . "/logs/Results Tracking/$event/";
$fh = fopen( $logsDir . "$event.txt", 'x' ) or die( "can't open file" );
fwrite( $fh, $message );
fclose( $fh );
}

$logsDir 转换为 E:\Dropbox\htdocs\Scrapers\this,除此之外,\$event\ 使每个事件都有自己的子文件夹。

无论如何我都会调整.. I.E /logs/Results Tracking/ .. 或 \logs\Results Tracking\..

仍然给我一个错误fopen(E:\Dropbox\htdocs\Scrapers\this\logs/Results Tracking/event1/event1.txt): failed to open stream: No such file or directory.

目录在那里,我也在那里创建了一个 .txt 文件,但没有找到。问题显然在于我如何描述我的目录结构。我该如何解决?我之前不想创建目录结构,我需要它来创建需要的文件夹。

【问题讨论】:

  • 你给这个文件什么权限?您的脚本必须具有写入权限才能访问它。
  • 错误信息里面真的写了$incomingvalue吗?因为如果是这样,您的变量没有被插值,并且文件名中有文字字符串$incomingvalue。在这种情况下,您可能在单引号字符串而不是双引号字符串中声明了文件名。
  • 我不明白如何在 Windows 中授予文件权限。当我使用$logDir = dirname( __FILE__ ) . "\\logs/"; $fileName = $logDir . $event . " - " . date( "F j, Y - g_i_s A" ) . ".htm"; $fh = fopen( $fileName, 'x' ) or die( "can't open file" ); fwrite( $fh, $message ); fclose( $fh ); 之类的东西时,它可以工作,但这不是创建动态目录。
  • @DaveRandom,没有。它列出了值,我只是在这里更改了它们。我会修改它以更好地反映

标签: php file directory fopen


【解决方案1】:

检查目标目录是否存在,如果不存在,则创建它。

   if(! is_dir($logsDir) ) { mkdir($logsDir, 0777, true); }

如果要描述路径,可以使用DIRECTORY_SEPARATOR

【讨论】:

  • 不存在斜杠/反斜杠问题。正斜杠无处不在。他们唯一不工作的地方是 cmd.exe - 他们甚至可以在 explorer.exe 的地址栏和运行框。
  • @KiloJKilo 权限参数在 Windows 上被有效地忽略,因为它在那里没有任何意义,Windows 权限不能以这种方式工作。您可以传递任何值,重要的是要将 true 传递给第三个参数。
  • @KiloJKilo:模式在 Windows 上被忽略,php.net/manual/en/function.mkdir.php
  • @Fabio,谢谢这个解决方案有效。它创建目录并写入文件。谢谢你的帮助。这是我解决的一大块难题。再次感谢。