Php 为什么file_put_contents()给我的文件起了疯狂的名字?
尝试使用PHP创建备份Php 为什么file_put_contents()给我的文件起了疯狂的名字?,php,file,Php,File,尝试使用PHP创建备份 $filename = getcwd() . "/backup/" . $slug . date("Y-m-d-h:i:sa") . ".inc"; echo $filename; file_put_contents($filename, $content); 预期输出文件名: myfile2014-02-13-4:53:04pm.inc myfile2014-02-13-4:54:29pm.inc T6L3PF~C.INC TAT6YB~L.INC 实际输出文件名
$filename = getcwd() . "/backup/" . $slug . date("Y-m-d-h:i:sa") . ".inc";
echo $filename;
file_put_contents($filename, $content);
预期输出文件名:
myfile2014-02-13-4:53:04pm.inc
myfile2014-02-13-4:54:29pm.inc
T6L3PF~C.INC
TAT6YB~L.INC
实际输出文件名:
myfile2014-02-13-4:53:04pm.inc
myfile2014-02-13-4:54:29pm.inc
T6L3PF~C.INC
TAT6YB~L.INC
另外,创建文件需要很长时间。这真的很奇怪:我还在同一个脚本中创建另一个文件——除了不在备份目录中
$filename = getcwd() . "/" . $slug . ".html";
file_put_contents($filename, $content);
它总是完美地工作,总是立即创建,没有延迟
myfile.html
备份文件的创建时间超过一分钟,即使它位于脚本的.html
部分之前
smb://my/path
好了,就这样。由于“:”在Windows中不是有效的文件路径字符,Samba提供了一个假文件名,而不是您期望的文件名。改为通过SSH装载。问题似乎出在这里:
date("Y-m-d-h:i:sa")
应产生:
2014-02-13-4:53:04pm
但显然,
:
把一切都搞砸了。将其更改为date(“Y-m-d-h.i.sa”)
,现在一切正常。听起来像是Windows的问题。我在使用OSX,不确定服务器是什么,我假设它是LAMP。你在备份什么?@brentonstrine如果.INC
扩展不是你创建的test.INC
的问题,那么我99%确定问题在于所选的文件名。尝试将:
日期(“Y-m-d-h:i:sa”)切换到-
(或其他任何内容),例如:日期(“Y-m-d-h-i-sa”)
。您可能正在使用文件名中的:
生成文件系统冲突,因为此符号通常用于确定协议或端口。@brentonstrine不,我很高兴它能为您解决问题。尽管我试着帮你,你还是自己找到了解决方案,学到了一些新东西:)继续编码!我安装它以查看它的方式真的有区别吗?该脚本在Linux服务器(AFAICT)上运行,并将文件写入同一服务器上的目录。是的,确实如此。Samba假定客户端是Windows机器,并为其提供Windows友好的文件名。但是,如果我卸载驱动器,然后尝试在浏览器中查看该文件,它仍然是相同的,不涉及Samba。还是我误解了桑巴舞的工作原理?Samba是否控制LAMP服务器上的所有文件创建?您如何在浏览器中查看文件?使用URL。另外,如果问题出在:
,那么我的.html
文件将无法正确编写,但确实如此。