PHP file_put_contents不截断CIFS mount中的文件

时间:2012-08-31 08:32:40

标签: php fwrite cifs

我有一个奇怪的问题,PHP的file_put_contents()fwrite()(在用fopen('filename', 'w');打开文件句柄后)函数没有按照{{1的PHP文档所述'截断目标文件}}。该文件驻留在Seagate BlackArmor NAS设备上,该设备使用CIFS安装在Linux服务器(Ubuntu 10.04)上,如下所示:

fwrite()

示例:

myfile.txt的内容:mount -t cifs -o defaults,credentials=/etc/smbpass/demo.smbpass,uid=1005,gid=1005,dir_mode=0770,file_mod=0660 //xxx.xxx.xxx.xxx/demo/files /var/www/mysite/src/files/

使用代码thisisabigfatpandaonwheelsgoingdownthestreet

运行PHP脚本

myfile.txt的内容:file_put_contents('myfile.txt', 'blah');

文件的预期内容显然是blahisabigfatpandaonwheelsgoingdownthestreet,但事实并非如此。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我在自己的samba设置上有完全相同的症状(Debian 6 x64 with samba 3.5.6。)。我最终将其缩小到以下选项,导致完全相同的行为:

large readwrite = no

当设置为yes时(或删除,因为是默认设置),问题就消失了。

提交针对Debain和上游Samba的错误报告:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=699461
https://bugzilla.samba.org/show_bug.cgi?id=9622

答案 1 :(得分:0)

由于您的挂载标志

,该文件不是全局可读/可写的

mount -t cifs -o defaults,credentials = / etc / smbpass / demo.smbpass,uid = 1005,gid = 1005, dir_mode = 0770,file_mod = 0660 //xxx.xxx。 xxx.xxx/demo/files / var / www / mysite / src / files /

如果您通过Web服务器运行它,则无权访问该文件,因为它以不同的用户身份运行。您可以使用is_writable('myfile.txt')来判断是否是这种情况。