【发布时间】:2014-01-24 04:40:19
【问题描述】:
鉴于以下在 windows 机器上运行,我希望在文档根目录中创建一个文件,但事实并非如此。
$file = str_replace("\\",'/',dirname(__FILE__).'/swsql.bat');
$handle = fopen($file,'w+b'); //using binary mode for windows
fwrite($handle,'test');
fclose($handle);
我正在关注http://www.php.net/manual/en/function.fopen.php 此处提供的文档,并且由于我正在处理的项目正在运行 php 版本 4,因此我无法使用 file_put_contents()。我也试过没有指定二进制模式并得到相同的结果。
我使用echo 输出带有和不带有str_replace 的$file 变量。没有它,字符串包含反斜杠\,根据文档,如果您不想转义反斜杠\\,则字符串包含正斜杠/,您可以使用正斜杠,因为Windows 尊重这两者。由于dirname(__FILE__) 返回未转义的反斜杠,我使用str_replace 修复它。 $file 的内容正是我所期望的,正在解释的文件的当前路径附加了/swsql.bat/ 并且错误日志中没有错误。
编辑
将$file = str_replace("\\",'/',dirname(__FILE__).'/swsql.bat');
更改为
$file = str_replace("\\",'/',dirname(__FILE__)).'/swsql.bat'; 解决了这个问题。
`
【问题讨论】:
-
你的脚本对该目录有写权限吗?
-
应该,虽然我不完全确定如何检查
-
确保
$file拥有您认为的价值。其他一切对我来说都很好,虽然我不得不承认我从来没有写过任何 PHP 代码,只是读过它,所以我不是这里的专家。 -
看起来您使用 str_replace 以错误的方式转换斜杠...尝试不使用它并将最后一个斜杠更改为 \\
-
@rfsbsb 请看我上次的编辑