¿Qué significa "(include_path=''.:/usr/share/pear:/usr/share/php'')"?
cron apache2 (6)
Tengo una estructura de archivos en EC2 como: pero enfrentando un problema de referencia de archivos.
index.php
-db
-config.php
-cron
-cron1.php
He intentado hacer referencia a archivos como:
`require_once (dirname(__FILE__).''/db/config.php'');`
`require_once (($_SERVER[''DOCUMENT_ROOT'']).''/db/config.php'');`
pero cron no se ejecuta. Da error en el correo como
`PHP Warning: require_once(/db/config.php): failed to open stream: No such file or directory in /var/www/html/cron/cron1.php on line 3
Warning: require_once(/db/config.php): failed to open stream: No such file or directory in /var/www/html/cron/cron1.php on line 3
PHP Fatal error: require_once(): Failed opening required ''/db/config.php'' (include_path=''.:/usr/share/pear:/usr/share/php'') in /var/www/html/cron/cron1.php on line 3
Fatal error: require_once(): Failed opening required ''/db/config.php'' (include_path=''.:/usr/share/pear:/usr/share/php'') in /var/www/html/cron/cron1.php on line 3`
Eso es solo los directorios que le muestran dónde estaba PHP buscando su archivo. Asegúrese de que cron1.php
exista donde cree que lo hace. Y asegúrese de saber dónde dirname(__FILE__)
y $_SERVER[''DOCUMENT_ROOT'']
apuntan a donde esperaban.
Este valor se puede ajustar en su archivo php.ini.
Si miras el constante PATH_SEPARATOR de PHP, verás que es ":" para ti.
Si separa la cadena ".: / Usr / share / pear: / usr / share / php" usando ese carácter, obtendrá 3 partes
- . (esto significa el directorio actual en el que se encuentra su código)
- / usr / share / pear
- / usr / share / ph
Cualquier intento de incluir cosas () / require (), se buscará en estos directorios, en este orden.
Le muestra eso en el mensaje de error para informarle dónde NO pudo encontrar el archivo que estaba tratando de requerir ()
Para su primer requerimiento, si eso está siendo incluido en su index.php, entonces no necesita las cosas del directorio, solo haga lo siguiente:
require_once ( ''db/config.php'');
En realidad, las soluciones consisten en abrir el archivo php.ini editar la línea include_path y cambiarla completamente a
include_path=''.:/usr/share/php:/usr/share/pear''
o anexar el
''.:/usr/share/php:/usr/share/pear''
al valor actual de include_path.
Se explica con más detalle en: http://pear.php.net/manual/en/installation.checking.php#installation.checking.cli.phpdir
Solución al problema
como lo menciona Uberfuzzy [causa real del problema]
Si miras la constante de PHP [PATH_SEPARATOR] [1], verás que es ":" para ti.
Si separa la cadena ".: / Usr / share / pear: / usr / share / php" usando ese carácter, obtendrá 3 partes
- . (esto significa el directorio actual en el que se encuentra su código)
- / usr / share / pear
- / usr / share / ph
Cualquier intento de incluir cosas () / require (), se buscará en estos directorios, en este orden.
Le muestra eso en el mensaje de error para informarle dónde NO pudo encontrar el archivo que estaba tratando de requerir ()
Esa fue la causa del error.
Ahora llegando a la solución
- Paso 1 : encuentra tu archivo php.ini usando el comando
php --ini
(en mi caso:/etc/php5/cli/php.ini
) - Paso 2 : encuentra
include_path
en vi usandoesc
luego presiona/include_path
luegoenter
- Paso 3 : elimine el comentario de esa línea e incluya su directorio del servidor, su ruta debe verse así:
include_path = ".:/usr/share/php:/var/www/<directory>/"
- Paso 4: reiniciar apache
sudo service apache2 restart
Eso es todo. Espero eso ayude.
Tuve un problema similar. Solo para ayudar a alguien con el mismo problema:
Mi error fue el atributo de archivo de usuario para los archivos en / var / www. Después de cambiarlos al usuario "www-data", el problema desapareció.
Tuve el mismo error al incluir el archivo de la raíz de mi proyecto en codeigniter
. Lo estaba usando en common.php
de mi proyecto.
<?php include_once base_url().''csrf-magic-master/csrf-magic.php''; ?>
Lo cambié a
<?php include_once (''csrf-magic-master/csrf-magic.php''); ?>
Trabajando bien ahora.