PHP nao acessa includes

Iniciado por iagosallezze, 14 de Agosto de 2013, 15:10

tópico anterior - próximo tópico

iagosallezze

Boa tarde a todos. Meu primeiro post na comul pois pesquisei mas não consegui resolver... Achei algumas dicas sobre PATH mas não funcionaram (ou não fiz corretamente). Usava debian e recentemente instalei um ubuntu server para ser servidor web e futuramente configurar um WordPress nele também.

O problema e que, quando tento carregar minha index.php ela retorna o seguinte erro:

Warning: include_once(includes/funcoes.php): failed to open stream: Permission denied in /var/www/intranet/index.php on line 3 Warning: include_once(): Failed opening 'includes/funcoes.php' for inclusion (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/intranet/index.php on line 3 Fatal error: Class 'funcoes' not found in /var/www/intranet/index.php on line 5

A principio pensei ser permissão, e mesmo não entendendo muito fiz um #chmod 7777 includes

O código que retorna o erro e o:

<?php
error_reporting(E_ALL); ini_set('display_errors','On');
include_once('includes/funcoes.php');
global $funcao;
$funcao = new funcoes();
?>


atraves do get_include_path() obtive:
.:/usr/share/php:/usr/share/pear

E ja conferir, a página se encontra dentro da includes sim...

Alguém poderia me dar uma luz?

Agradecido...

Felix

Qual a sua versão do PHP? Aqui estou usando a 5.2 e faço meus includes de forma diferente, como por exemplo:


include '../common.php';

iagosallezze

Felix, meu php é:

PHP Version 5.3.10-1ubuntu3.7

E tentei da forma que você faz e o resultado foi o mesmo...

Felix

Mas o erro foi o mesmo ao fazer o include da forma como eu faço? ou foi diferente?

iagosallezze

#4
Foi o msm Felix :/

Solid One

#5
O erro parece ser relacionado a permissão de leitura de arquivos. Supostamente, o usuário padrão do apache (que o PHP utiliza para leitura de scripts) não consegue ler o arquivo "funcoes.php", acusando erro de "Permissão Negada".

O arquivo "funcoes.php", que você está chamando via include, onde ele está situado? Em /var/www, ou outro diretório chamado via link simbólico ou similar?

Pressupondo que o arquivo esteja com nível de permissões que o torne ilegível para outros usuários do sistema, uma provável solução seria você mudar as permissões via chmod, mudando-a para 777.

iagosallezze

Ola Solid One...

Minha estrutura esta assim:

/var/www/intranet/index.php


e o local da include e:

/var/www/intranet/includes/funcoes.php

Quanto a permissao, ja efetuei o CHMOD 7777 nele...

irtigor

O usuário só precisa de permissão de leitura para os scripts, e de execução pro diretório.

agente100gelo

Qual o resultado do comando:

ls -l /var/www/intranet/
Advogado e analista de sistema cearense.
Twitter: @glaydson

Solid One

#9
Posso estar enganado, mas acho que para o comando "include" funcionar, o arquivo a ser incluído precisa ser uma classe com nome igual ao arquivo. Ou seja, o arquivo "funcoes.php" deve obrigatoriamente começar com algo do tipo:


<?phpclass funcoes {    public function converteNumeroString($numero){        return (string)$numero;    }}?>



Se for esse o caso, uma solução é transformar esse arquivo em classe, tal como ilustrado no exemplo acima. E uma vez feito, você poderia chamar a função "converteNumeroString" mais ou menos da seguinte forma, na página "index.php":


<?phpinclude "funcoes.php";$funcoes = new funcoes();echo $funcoes->converteNumeroString(123);?>



No entanto, para facilitar, você pode simplesmente trocar "include" por "require", já que este não requer que o arquivo seja uma classe. Utilizando require, acredito que o código funcionará estando da seguinte forma:


<?phppublic function converteNumeroString($numero){    return (string)$numero;}public function converteStringNumero($string){    return (int)$string;}?>



E você poderá chamar a função da seguinte forma:


<?phprequire "funcoes.php";echo converteNumeroString(123);?>



Teste isso, pra ver se não resolve. Acredito que isso sirva para demonstrar as maiores diferenças entre o comando "include" e "require" em PHP.

iagosallezze

Primeiramente obrigado a todos que estão tentando me ajudar.. Realmente preciso disso funcionando...

Bem...

agente100gelo, o resultado do comando foi:

drwx--S--- 3 nobody root 4096 Aug 13 21:48 css
drwx--S--- 2 nobody root 4096 Aug 13 21:48 ducoprint
-rwsrwsrwt 1 nobody root 1679 Dec 12  2012 ducoprint.php
-rwsrwsrwt 1 nobody root  943 Dec 11  2012 graficos.html
drwx--S--- 2 nobody root 4096 Aug 13 21:48 img
drwx--S--- 2 nobody root 4096 Aug 13 21:48 includes
-rwxr--r-- 1 nobody root 1336 Aug 15 15:39 index.php
-rwsrwsrwt 1 nobody root 1616 Jul 26 13:33 intranet.php
drwx--S--- 2 nobody root 4096 Aug 13 21:48 js
drwx--S--- 2 nobody root 4096 Aug 13 21:48 novidades
drwx--S--- 2 nobody root 4096 Dec 18  2012 suprivix

Solid One, fiz o teste usando require como você sugeriu e o problema persiste o mesmo.

A respeito de classes e etc... Esse sistema foi feito em php por mim e funciona já em servidores windows aqui... Os apaches + php rodam perfeitamente os mesmos arquivos que estão hospedados no ubuntu server...

Ou seja, acredito que não seja um problema na programação do php...

irtigor

Falta acertar a permissão do diretório. Dê rx pro "outros" ou altere o dono/grupo pro www-data.

agente100gelo

Essa permissão nobody:root tá estranha.

Digite:
sudo chown -R usuario.usuario /var/www/intranet

Onde usuário é seu login.

Agora você poderá editar direto na pasta.
Advogado e analista de sistema cearense.
Twitter: @glaydson

iagosallezze

Senhores... Funcionou... Era como o próprio erro dizia problema na permissão... Fiz como dito e agora esta ok...

Primeiramente meu MUITO obrigado a todos... E segundo, para finalizar uma dúvida que me ficou então...

Eu imaginava que, quando dava permissão a uma pasta, automaticamente dava a mesma permissão para todas as subpastas e arquivos... Isso não ocorre?  Ou como posso fazer para que isso ocorra?

iagosallezze

Encontrei.. E o -R como parâmetro né!!!

Então é isso... Obrigado a todos :D