3

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

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/

例子:

myfile.txt 的内容:thisisabigfatpandaonwheelsgoingdownthestreet

使用代码运行 PHP 脚本:file_put_contents('myfile.txt', 'blah');

myfile.txt 的内容:blahisabigfatpandaonwheelsgoingdownthestreet

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

有任何想法吗?

4

2 回答 2

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

于 2013-01-29T14:32:45.193 回答
1

由于您的挂载标志,该文件不是世界可读/可写的

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') 来判断是否是这种情况。

于 2012-08-31T08:44:56.720 回答