Eugênia 0 Denunciar post Postado Novembro 10, 2007 Pessoas, estou obtendo um erro ao tentar ler um arquivo nas paginas php. Trecho do codigo da pagina na qual usa fopen: function atualiza_status(){ $arquivo = $this->path . $this->sala . ".sts"; $fd = fopen($arquivo, 'r'); $conteudo = fread($fd, filesize($arquivo)); fclose($fd); o erro que obtenho é o seguinte: Warning: fread() [function.fread]: Length parameter must be greater than 0 in C:\Arquivos de programas\Apache Group\Apache\chat\chat.inc.php on line 189 O servidor é windows, e não está sendo usado banco de dados, as saidas estão sendo gravadas em arqquivos .sts e .cho. Isso pode interfirir este erro??? Qual extensão poderia usar??? Alguém pode me ajudar? Obrigada. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Capella 7 Denunciar post Postado Novembro 10, 2007 Eugênia. tente coloca assim. PHP function atualiza_status(){$arquivo = $this->path . $this->sala . ".sts"; $fd = fopen($arquivo, 'r'); if(!$fp){ echo "erro: não foi possivel localizar o arquivo ou não pode ser aberto."; }else{ $conteudo = fread($fd, filesize($arquivo)); fclose($fd); } } o que pode está acontecendo e que não está recebendo o arquivo.. testa ae e me fale Compartilhar este post Link para o post Compartilhar em outros sites
Eugênia 0 Denunciar post Postado Novembro 11, 2007 Eugênia. tente coloca assim. PHP function atualiza_status(){$arquivo = $this->path . $this->sala . ".sts"; $fd = fopen($arquivo, 'r'); if(!$fp){ echo "erro: não foi possivel localizar o arquivo ou não pode ser aberto."; }else{ $conteudo = fread($fd, filesize($arquivo)); fclose($fd); } } Bem, resolveu em partes... Agora o erro é durante a leitura do arquivo: $conteudo = fread($fd, filesize($arquivo)); ->> neste ponto... O que pode ser? Estou no windows, e não deveria haver problemas com permissões. Compartilhar este post Link para o post Compartilhar em outros sites
Eugênia 0 Denunciar post Postado Novembro 11, 2007 Acredito que seja nas permissões dos arquivos, pois quando não é erro de fopen é fread ou fclose. Como faço para corrigir isso? Eu já dei permissão aos arquivos para todos os usuarios do servidor, no entanto, o erro persiste. Por favor, alguem tem ideia do que posso fazer?? Obrigada, Compartilhar este post Link para o post Compartilhar em outros sites
klawdyo 0 Denunciar post Postado Novembro 12, 2007 Você já testou se a função está gerando corretamente o nome do arquivo? Faça assim: PHP function atualiza_status(){echo $arquivo = $this->path . $this->sala . ".sts"; /*$fd = fopen($arquivo, 'r'); if(!$fp){ echo "erro: não foi possivel localizar o arquivo ou não pode ser aberto."; }else{ $conteudo = fread($fd, filesize($arquivo)); fclose($fd); } //*/ } Ele vai imprimir a variável $arquivo. Veja se tá gerando certo, pois esse erro que tá dando é pq o arquivo não existe, num é de permissão não. O windows não tem essa frescura. Compartilhar este post Link para o post Compartilhar em outros sites
Eugênia 0 Denunciar post Postado Novembro 12, 2007 Você já testou se a função está gerando corretamente o nome do arquivo? Faça assim: PHP function atualiza_status(){echo $arquivo = $this->path . $this->sala . ".sts"; /*$fd = fopen($arquivo, 'r'); if(!$fp){ echo "erro: não foi possivel localizar o arquivo ou não pode ser aberto."; }else{ $conteudo = fread($fd, filesize($arquivo)); fclose($fd); } //*/ } Ele vai imprimir a variável $arquivo. Veja se tá gerando certo, pois esse erro que tá dando é pq o arquivo não existe, num é de permissão não. O windows não tem essa frescura. Fiz isso e imprimiu certinho, ou seja, o caminho está correto. Ele dá erro tanto na leitura quanto na escrita. O que mais posso verificar? Fazendo testes ontem, eu percebi, no primeiro acesso, dá os erros apresentados acima, no entanto, usando um outro browser e acessando novamente ele acha os arquivos mas dá erro de leitura, não mais no fopen. Não consigo entender o motivo. Podem me dá mais ideias???? Compartilhar este post Link para o post Compartilhar em outros sites
Eugênia 0 Denunciar post Postado Novembro 12, 2007 Eugênia. tente coloca assim. PHP function atualiza_status(){$arquivo = $this->path . $this->sala . ".sts"; $fd = fopen($arquivo, 'r'); if(!$fp){ echo "erro: não foi possivel localizar o arquivo ou não pode ser aberto."; }else{ $conteudo = fread($fd, filesize($arquivo)); fclose($fd); } } o que pode está acontecendo e que não está recebendo o arquivo.. testa ae e me fale Bruno, não funcionou...Olha só, quando faço o primeiro acesso, o arquivo .sts é criado em outra função e em seguida é aberto para modificação. Na abertura, fopen, dá o erro que mencionei acima. Quando crio o arquivo manualmente e acesso pelo primeira vez a pagina, ele aponta o erro de leitura do arquivo, como se não o achasse, no entanto, qdo eu acesso novamente a pagina, por um outro browser, ele abre novalmente, sem erro nenhum. O que pode está acontecendo? Obrigada pela ajuda. Compartilhar este post Link para o post Compartilhar em outros sites
slipce 0 Denunciar post Postado Novembro 12, 2007 Da onde está vindo essa variável $fp do if??? Compartilhar este post Link para o post Compartilhar em outros sites
Eugênia 0 Denunciar post Postado Novembro 12, 2007 Da onde está vindo essa variável $fp do if??? Foi digitado errado, é a mesma variavel $fd daqui ->> $fd = fopen($arquivo, 'r');. Compartilhar este post Link para o post Compartilhar em outros sites
klawdyo 0 Denunciar post Postado Novembro 12, 2007 no seu código você tá criando o fopen com $fD, mas té verificando $fP? ou foi só um erro na digitação de lá pra cá? Outra coisa o que você guarda dentro desse arquivo STS? tente chamar o arquivo usando só a funçãoo file_get_contents($nome_arquivo) ela é mais simples que a outra. Compartilhar este post Link para o post Compartilhar em outros sites
slipce 0 Denunciar post Postado Novembro 12, 2007 Seu código está funcionando direito aqui na minha máquina coloqu isso abaixo da linha de atribuição da variavel $arquivo if ( !file_exists( $arquivo ) ){ echo "O arquivo especificado não existe:".$arquivo; exit; } Compartilhar este post Link para o post Compartilhar em outros sites
Eugênia 0 Denunciar post Postado Novembro 12, 2007 no seu código você tá criando o fopen com $fD, mas té verificando $fP? ou foi só um erro na digitação de lá pra cá? Outra coisa o que você guarda dentro desse arquivo STS? tente chamar o arquivo usando só a funçãoo file_get_contents($nome_arquivo) ela é mais simples que a outra. Foi só erro de digitação, estou usando #fd, tanto para abrir quanto para verificar. No arquivo .sts eu guardo os usuarios e salas. Vou tentar usar essa outra função. Compartilhar este post Link para o post Compartilhar em outros sites
klawdyo 0 Denunciar post Postado Novembro 12, 2007 qual o formato dos dados dentro do arquivo .STS? Compartilhar este post Link para o post Compartilhar em outros sites
Eugênia 0 Denunciar post Postado Novembro 12, 2007 Seu código está funcionando direito aqui na minha máquina coloqu isso abaixo da linha de atribuição da variavel $arquivo if ( !file_exists( $arquivo ) ){ echo "O arquivo especificado não existe:".$arquivo; exit; } Quando o arquivo não existe, ele deve ser criado, pois estou usando fopen("arquivo","a+"). O fato da pasta onde estou tentando criar este arquivo está como somente leitura afeta essa criação?? Tento alterar a permissão desta pasta mas não consigo de jeito nenhum, rsrs. eu tiro somente leitura e aplico e qdo volto para verificar, esta marcada a opção somente leitura da pasta. O que pode ser isso? Essa permissão afeta a criação e leitura do arquivo salvo nesta pasta? qual o formato dos dados dentro do arquivo .STS? Formato texto: fulano||entrou na sala...||0||| ->> isso que salvo no arquivo. qual o formato dos dados dentro do arquivo .STS? Formato Texto: fulano||entrou na sala...||0||| ->> salvo exatamente isto no arquivo .cho Compartilhar este post Link para o post Compartilhar em outros sites
klawdyo 0 Denunciar post Postado Novembro 12, 2007 tá mudando sozinho? tá vivo? heeheehehe pq você num começa a usar banco de dados? Resolve logo seu problema de permissão e dá mais poder pra você alterar o que quiser no futuro, entre outras facilidades. Eu num tenho certeza se o somente leitura das pastas do windows afetam isso não... pelos testes que eu fiz agora, com upload pra uma pasta somente leitura, aconteceu normalmente Compartilhar este post Link para o post Compartilhar em outros sites
Eugênia 0 Denunciar post Postado Novembro 12, 2007 tá mudando sozinho? tá vivo? heeheehehe pq você num começa a usar banco de dados? Resolve logo seu problema de permissão e dá mais poder pra você alterar o que quiser no futuro, entre outras facilidades. Eu num tenho certeza se o somente leitura das pastas do windows afetam isso não... pelos testes que eu fiz agora, com upload pra uma pasta somente leitura, aconteceu normalmente Vou dá uma olhada em como altero isso para usar MySQL. Não conheço bem php, por isso, toda esta dificuldade. Vou tentar mudar para banco. Obrigada, Compartilhar este post Link para o post Compartilhar em outros sites
slipce 0 Denunciar post Postado Novembro 12, 2007 Afinal de contas o que você tá querendo fazer, e o que está impedindo que isso seja feito, pois aquele erro que você diz dar no inicio do tópico ocorre sempre que o segundo parametro da função fread for menor que um, ou seja, sempre que você criar um arquivo em branco ele vai dar esse erro na hora de ler porque você estará passando o filesize do arquivo que será zero. Os erros com o fopen ou são de caminhos errados ou permissão, testei aqui na minha máquina e ele consegue criar um texto normalmente numa pasta somente leitura, só que se o arquivo que você estiver tentando escrever também possuir o atributo somente leitura vai dar erro quando você tentar escrever nele. Verifica se o arquivo está com o atributo somente leitura marcado. Compartilhar este post Link para o post Compartilhar em outros sites
Eugênia 0 Denunciar post Postado Novembro 12, 2007 Afinal de contas o que você tá querendo fazer, e o que está impedindo que isso seja feito, pois aquele erro que você diz dar no inicio do tópico ocorre sempre que o segundo parametro da função fread for menor que um, ou seja, sempre que você criar um arquivo em branco ele vai dar esse erro na hora de ler porque você estará passando o filesize do arquivo que será zero. Os erros com o fopen ou são de caminhos errados ou permissão, testei aqui na minha máquina e ele consegue criar um texto normalmente numa pasta somente leitura, só que se o arquivo que você estiver tentando escrever também possuir o atributo somente leitura vai dar erro quando você tentar escrever nele. Verifica se o arquivo está com o atributo somente leitura marcado. Os arquivos não estão com a permissão somente leitura, permite modificação tb. Fiz um teste. Sobre os caminhos, estes estão corretos, já verifiquei varias vezes. Enfim...to perdida e não sei mais o que possa ser. Vou anexar a parte onde estou usando fopen e fread p/ ver se ajuda. Só lembrando, estou com servidor WINDOWS. function atualiza_status(){ $arquivo = $this->path .".sts"; ->> o caminho é valido!!! echo "Caminho ->".$arquivo; $fd = fopen($arquivo, "r"); -> o arquivo já existe e tem conteúdo!!! if(!$fd){ echo "[Error] Falha ao ler arquivo"; } $conteudo = fread($fd, filesize($arquivo)); fclose($fd); Erros: Caminho ->/salas/.sts Warning: fopen(/salas/.sts) [function.fopen]: failed to open stream: No such file or directory in C:\Arquivos de programas\Apache Group\Apache\chat\chat.inc.php on line 88 [Error] Falha ao ler arquivo Warning: filesize() [function.filesize]: stat failed for /salas/.sts in C:\Arquivos de programas\Apache Group\Apache\chat\chat.inc.php on line 92 Warning: fread(): supplied argument is not a valid stream resource in C:\Arquivos de programas\Apache Group\Apache\chat\chat.inc.php on line 92 Warning: fclose(): supplied argument is not a valid stream resource in C:\Arquivos de programas\Apache Group\Apache\chat\chat.inc.php on line 93 Mais uma vez obrigada, Compartilhar este post Link para o post Compartilhar em outros sites
klawdyo 0 Denunciar post Postado Novembro 13, 2007 Bom.. primeiramente que djabo de arquivo é /salas/.sts? essa barra antes do .sts existe mesmo? e a barra antes do salas? se vocÊ coloca a barra antes do sala, você tá dizendo que seu arquivo está no root, em http://localhost se seu arquivo estiver em localhost/chat vai dar erro segundo, seu arquivo se chama sala.sts ou só .sts? Compartilhar este post Link para o post Compartilhar em outros sites
Eugênia 0 Denunciar post Postado Novembro 13, 2007 Bom.. primeiramente que djabo de arquivo é /salas/.sts? essa barra antes do .sts existe mesmo? e a barra antes do salas? se vocÊ coloca a barra antes do sala, você tá dizendo que seu arquivo está no root, em http://localhost se seu arquivo estiver em localhost/chat vai dar erro segundo, seu arquivo se chama sala.sts ou só .sts? Cara, ai não tem problema algum...estou no windows e com esse / antes de salas ou sem, dá no mesmo, tudo está em chat exceto os arquivos .sts, estes arquivos estão na pasta /chat/salas. Entendeu? Uma questão de organização: as paginas .php estão em chat e os arquivos manipulados estão em salas. -> C:apache/chat/salas O arquivo se chama nada.sts. Não dei nome a ele por enquanto... Compartilhar este post Link para o post Compartilhar em outros sites