我有一个奇怪的问题,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
myfile.txt的内容:file_put_contents('myfile.txt', 'blah');
文件的预期内容显然是blahisabigfatpandaonwheelsgoingdownthestreet
,但事实并非如此。
有什么想法吗?
答案 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')来判断是否是这种情况。