Problema de truncamento de arquivo estranho na montagem CIFS


2

Com referência a: https://stackoverflow.com/questions/12211629/php-file-put-contents-not-truncating-file-in-cifs-mount

Temos um dispositivo Seagate BlackArmor NAS, montado em nosso servidor Ubuntu 10.04 da seguinte maneira:

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 deveria truncar arquivos e depois inserir conteúdo nesses arquivos no NAS acaba substituindo apenas os primeiros bytes do arquivo (até o comprimento do novo conteúdo) e depois o restante do anterior O conteúdo "antigo" 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.

O uso de PHP fwrite()depois de criar um identificador de arquivo com fopen('filename', 'w');o mesmo efeito. ftruncate()também não funciona corretamente. Usar um comando shell, como o que echo -n "blah" > myfile.txttem o mesmo efeito (é assim que sei que não é um problema específico do PHP).

Atualmente, minha única solução alternativa é excluir os arquivos e criá-los do zero, mas prefiro não alterar nenhum código no meu aplicativo, se possível (apenas começamos a usar o dispositivo NAS recentemente). Prefiro aplicar uma solução ao que parece ser um problema relacionado ao SO / montagem.

Alguma ideia?

Respostas:


1

Eu tive exatamente os mesmos sintomas em uma configuração de samba própria (Debian 6 x64 com samba 3.5.6.). Finalmente, reduzi-o à seguinte opção, causando exatamente o mesmo comportamento:

large readwrite = no

Quando definido como yesalternativa (ou removido, como sim é a configuração padrão), os problemas desapareceram.

Relatórios de erros arquivados no Debain e no Samba upstream:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=699461
https://bugzilla.samba.org/show_bug.cgi?id=9622

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.