Com referência a: link
Temos um dispositivo Seagate BlackArmor NAS, que é montado em nosso servidor Ubuntu 10.04 da seguinte forma:
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/
Parece que qualquer operação que deve truncar arquivos e inserir conteúdo nesses arquivos no NAS acaba substituindo apenas os primeiros bytes do arquivo (até o comprimento do novo conteúdo) e, em seguida, o restante do conteúdo "antigo" anterior ainda está no arquivo.
Por exemplo:
Conteúdo do myfile.txt: thisisabigfatpandaonwheelsgoingdownthestreet
Execute o script PHP com o código: file_put_contents('myfile.txt', 'blah');
Conteúdo do myfile.txt: blahisabigfatpandaonwheelsgoingdownthestreet
O conteúdo esperado do arquivo é obviamente blah
, mas esse não é o caso.
Usar fwrite()
do PHP depois de criar um identificador de arquivo com fopen('filename', 'w');
tem o mesmo efeito. ftruncate()
também não funciona corretamente. Usar um comando shell como echo -n "blah" > myfile.txt
tem o mesmo efeito (é assim que eu sei que não é um problema específico do PHP).
Meu único trabalho atualmente é excluir os arquivos e criá-los do zero, mas prefiro não alterar nenhum código em meu aplicativo, se possível (só começamos a usar o dispositivo NAS recentemente). Eu prefiro aplicar uma solução para o que parece ser um problema relacionado ao mount / relacionado ao sistema operacional.
Alguma idéia?