Php 为什么file_put_contents()给我的文件起了疯狂的名字?

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 实际输出文件名

尝试使用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
实际输出文件名:

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
文件将无法正确编写,但确实如此。