Quando eu meto o pau em linux, digo que é uma bosta, um lixo, os mais xiitas querem me pegar de pau. Mas veja a historinha de hoje.
Catei um exemplo simplérrimo de uma enquete que grava os dados em arquivo texto, toda feita em PHP. Coisinha simples, baba de usar.
Mexi daqui e dali, e integrei ela em um site meu. Fiz todos os testes no servidor local aqui (apache em cima do windows 2000 e php5). Tudo funcionou perfeitamente, uma maravilha.
O mexe-mexe foi basicamente formatação da parte html e css, ou seja não mexi em nada no engine, exceto fato de mover os “bancos de dados txt” pra um diretório, obviamente modifiquei o path no script e tudo joia. 1000 maravilhas aqui no servidor windows.
Dai subi o arquivo pro servidor web que ronda em…. linux lixux. Adivinha o resultado?
Contei exatamente TRÊS QUATRO erros cabeludos.
– Alerta de divisão por zero quando a enquete esta com zero votos.
– Não consegue gravar nem a poder de macumba nos arquivos, mesmo dando chmod 666, e tudo se passa lindamente como se tivesse gravado e não dá um erro se quer.
– Dá um alerta pra lá de bizarro na função FREAD.
– Consegui criar 6 arquivos com caracteres proibidos no nome, tal como “enquete\data.txt” que não é apagado por nenhum cliente FTP, pois dá erro 550, prohibited file name. (Edit 21/01/2010: Consegui apagar, a dica esta aqui: https://www.crashcomputer.com.br/?p=1290)
Não é lindo?
O que tive que “desmanchar”:
– O alerta de erro de divisão, resolvi da forma tosca… todas enquetes sempre irão sair com um voto… o meu. Dai não dá o erro.
– E não gravou nem a pau, pedrada e o cacete que for no diretório /enquete. Tive que mover os arquivos txt pra RAIS do servidor e remover o caminho para o diretório. Dai gravou…
– O erro da função FREAD, em um fórum alguém deu duas dicas: Não deixar nenhum dos dois arquivos vazios (quando criar a enquete) e colocar uma @ antes da função FREAD
Tempo gasto na operação “fazer o que roda bem no servidor windows, rodar meia boca no servidor linux, entre um milhão de googleadas”: 3 horas.
Tempo que gastei (antes) pra modificar a enquete: 40 minutos.
É pra matar ou não?
Depois disso eu continuo dizendo… linux é um merda… viva o Windows com todos os seus bugs e defeitos, mas esse qualquer um com um minimo de conhecimentos conserta ou remenda.
Seja menos dramatico.
EU adoro Windows, programo em Visual C Windows (MFC C++) tambem
Mas eventualmente uso Linux, pois tem coisas que são possiveis fazer com extrema simplicidade; scripts BASH mt poderosos, por exemplo Acredite.
Lá existe um paraiso.
Não sou evangelista.
Mesmo por que uso e programo 99% do tempo em windows.
O detalhe é que a gente ta muito alienado pelo sistema das janelas; ele é pratico, legal, bonitinho, e exibe as imagens perfeitamente; ainda nao gosto do modo descontrolado com os pixels sao exibidos no X. Mas voltando, ai quando precisa usar o Linux fica com essa impressao pessima por alguns detalhes.
Seu problema dos arquivos? Bom, acho, imagino, acredito, penso que provavelmente quem está tentando gravar os arquivos é o usuario que roda o script PHP no servidor LINUX. E ele NÃO é SEU usuario, mas o usuario que iniciou o daewon do PHP no momento da chamada da pagina da internet.
Provavelmente o DIRETORIO onde voce está tentando gravar o arquivo esta sem permissão.
Voce terá que alterar as permissoes do DIRETORIO tambem. Já tive problemas assim no passado.
Abraços, espero ter ajudado.
Olha, isso é relativo. Tudo o que eu precisei depender de linux até hoje só deu dor de cabeça, enquanto no windows acaba funcionando.
Quanto a permissão no diretório, também cheguei a fazer isso ontem. Marquei a pasta com permissão 666 e nem assim deu certo.
No final aconteceu coisa mais esquisita ainda. Dentro do diretório "enquete" apareceu dois arquivos:
enquete\data.txt
enquete\ip.txt
Isso mesmo, arquivo com o caractere "\" no nome do arquivo. Pergunta se dá pra excluir ou renomear esses arquivos???
Tá bom ou quer mais?
Mas hein?
Olha, eu ODEIO Lixun (como dizia o mestre Adriano), mas tem coisa estranha nisso aí…
Pra início, o Lixun usa "/" no path, então os arquivos tinham que ficar como "enquete/data.txt", por exemplo. Talvez esse seja o problema de não conseguir gravar? Explicaria o pq de funcionar no raiz…
Já a divisão por zero é normal, isso acontece em toda linguagem. Se não aconteceu no Windows, tem algo errado é lá!
A divisão por zero, basta checar o divisor, se ele for 0, nem faz a conta e assume o resultado como 0
Agora esse da função fread é bizarríssimo. Nunca ouvi falar de tascar @!
Eu a uns dias atrás tive que mudar a forma como minha lojinha online manda os arquivos para quem compra os jogos, e tive que usar justamente o fread… usei um $buffer = fread($handle, $chunksize); e funcionou perfeitamente.
Por acaso você testou o resultado do fopen para ver se ele estava conseguindo abrir o arquivo?
Talvez voce tenha que ajustar os caminhos no seu programa, ajustando as BARRAS de \ para / com o post anterior colocou.
Se houver algum tipo de percauso diplomatico grave, a MS pode muito bem bloquear os windows aqui, sabiam disto? Essa é uma das diferenças mais delicadas que envolve o adoção de Linux. Sempre gosto de ter ele na manga.
Chico, agradeço o comentário. Quanto ao usar / ao invés de \, qualquer hora dessas eu testo, pois eu ando levando muito em consideração o famigerado "solucionador de problemas":
"A bagaça funciona? Então Nem rela! = Sem problemas!"
Sobre percauso diplomático eu digo o seguinte: A M$ não tem interesse sério em bloquear os windows… te digo isso pelo seguinte, ela tem a maior base instalada por causa também da pirataria. Te garanto que se ela fizer isso boa parte não vai legalizar a situação e vai procurar outras soluções que necessáriamente pode e não pode ser o sisteminha free ordinário que eu estou pegando alergia até no do nome.
E tem mais, a M$ já tentou intimidar com o XP… não deu. O seven inventaram a tal da ativação, segurou um pouco mas já resolveram um "by-pass" pra ela.
Escreva num quadro e pendure ai na parede uma máxima que eu já uso a tempos:
"Enquanto uma cabeça pensa no cadeado existirão outras 100 cabeças pensando no pé-de-cabra."
Então é o que eu digo, não existe software a prova de "sucrilhos", se o treco for interessante e tiver demanda, sempre terá uma legião por trás descobrindo com fazer o treco funcionar for free. É triste mas é assim que o mundo do software roda.
Edit em 21/04/2010: Consegui apagar os arquivos com esta dica aqui:
https://www.crashcomputer.com.br/?p=1290
Ufa!