2013-08-08 9 views
8

Ho una struttura file su EC2 come: ma di fronte a qualche problema di riferimento ai file.cosa significa "(include_path = '.:/Usr/share/pera:/usr/share/php')"?

index.php 
-db 
    -config.php 
-cron 
    -cron1.php 

Ho cercato File che fa riferimento come:

`require_once (dirname(__FILE__).'/db/config.php');` 
`require_once (($_SERVER['DOCUMENT_ROOT']).'/db/config.php');` 

ma cron non run.it dà errore di posta elettronica come

`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` 
+0

'require_once' in quale pagina php? È in "index.php"? – som

risposta

0

thats solo le directory che vi mostra dove PHP è stato cercando il tuo file. Assicurati che cron1.php esista dove pensi che sia. E assicurati di sapere dove dirname(__FILE__) e $_SERVER['DOCUMENT_ROOT'] puntano dove ti aspetteresti.

Questo valore può essere regolato nel file php.ini.

+0

sì, posso accedervi dall'url e il percorso dato è corretto. –

+0

ma puoi dirmi cosa significa "(include_path = '.:/Usr/share/pera:/usr/share/php')" –

+0

mi dà '/ var/www/html' –

7

Se si guarda la costante PHP PATH_SEPARATOR, verrà visualizzato ":" per te.

Se si rompe a parte la stringa ":./Usr/share/pera:/usr/share/php" con quel personaggio, si otterrà 3 parti

  • . (questo significa la directory corrente il codice è in)
  • /usr/share/pera
  • /usr/share/ph

Qualsiasi tentativo di includere()/richiedono() le cose, la volontà guarda in queste directory, in questo ordine.

Si sta dimostrando che nel messaggio di errore per farvi sapere dove non ha trovato il file che stavi cercando di richiedere()

Per la prima richiedere, se ciò è di essere compreso dal vostro index.php , allora non avete bisogno la roba dir, basta fare:

require_once ('db/config.php'); 
+0

grazie ha funzionato per me :) –

4

soluzione al problema

come menzionato da Uberfuzzy [vera causa del problema]

Se si guarda al PHP costante [costante PATH_SEPARATOR] [1] , vedrai che è ":" per te.

Se si rompe la stringa ".:/Usr/share/pera:./Usr/share/php" con quel personaggio, si otterrà 3 parti

  • (questo significa che la directory corrente il codice è in)
  • /usr/share/pera
  • /usr/share/ph

Qualsiasi tentativo di includere()/require() le cose, cercherà in queste directory, in questo ordine.

E si sta dimostrando che in il casino degli errori età per farti sapere dove NON potrebbe trovare il file che stavi cercando di richiedere()

Questa è stata la causa dell'errore.

Ora venendo alla soluzione

  1. Fase 1: Trova si file php.ini usando il comando php --ini (nel mio caso: /etc/php5/cli/php.ini)
  2. Fase 2: trovare include_path in vi utilizzando esc quindi premere /include_path quindi enter
  3. Fase 3: decommentare quella linea, se commentato e includere la directory del server, il percorso dovrebbe essere simile include_path = ".:/usr/share/php:/var/www/<directory>/"
  4. Fase 4: Riavviare apache sudo service apache2 restart

This is it. Spero che aiuti.

1

Ho avuto un problema simile. Solo per aiutare qualcuno con lo stesso problema:

Il mio errore era l'attributo file utente per i file in/var/www. Dopo averli rimessi all'utente "www-data", il problema era sparito.

0

Ho avuto lo stesso errore includendo il file dalla radice del mio progetto in codeigniter. Stavo usando questo nel common.php del mio progetto.

<?php include_once base_url().'csrf-magic-master/csrf-magic.php'; ?> 

ho cambiato in

<?php include_once ('csrf-magic-master/csrf-magic.php'); ?> 

Lavorare bene ora.