私はEC2上に次のようなファイル構造を持っていますが、ファイル参照の問題に直面しています。
index.php
-db
-config.php
-cron
-cron1.php
私は次のようにファイル参照を試みました:
`require_once (dirname(__FILE__).'/db/config.php');`
`require_once (($_SERVER['DOCUMENT_ROOT']).'/db/config.php');`
しかし、cronはrun.itではありません
`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`
PHP constant PATH_SEPARATOR を見ると、「:」であることがわかります。
その文字を使用して文字列「。:/ usr/share/pear:/ usr/share/php」を分解すると、3つの部分が得られます
Include()/ require()を試みると、これらのディレクトリがこの順序で検索されます。
エラーメッセージで、require()しようとしていたファイルが見つからなかった場所を知らせることを示しています。
最初のrequireで、index.phpに含まれている場合は、dirを必要としません。
require_once ( 'db/config.php');
uberfuzzy [問題の実際の原因]で述べたように
PHP定数[PATH_SEPARATOR] [1]を見ると、 ":"であることがわかります。
その文字を使用して文字列「。:/ usr/share/pear:/ usr/share/php」を分解すると、3つの部分が得られます
Include()/ require()を試みると、これらのディレクトリがこの順序で検索されます。
エラーメッセージで、require()しようとしていたファイルが見つからなかった場所を知らせることを示しています。
それがエラーの原因でした。
解決に近づいています
php --ini
を使用してphp.iniファイルを見つけます(私の場合は/etc/php5/cli/php.ini
)esc
を使用してviでinclude_path
を見つけ、/include_path
を押してからenter
を押しますinclude_path = ".:/usr/share/php:/var/www/<directory>/"
のようになります。Sudo service Apache2 restart
を再起動しますこれです。それが役に立てば幸い。
同様の問題がありました。同じ問題を抱えている人を助けるためだけに:
私のエラーは、/ var/www内のファイルのユーザーファイル属性です。それらをユーザー「www-data」に戻した後、問題はなくなりました。
実際には、php.iniファイルを開いてinclude_path行を編集し、それを完全に変更することで解決できます
include_path='.:/usr/share/php:/usr/share/pear'
または追加する
'.:/usr/share/php:/usr/share/pear'
include_pathの現在の値に。
さらに詳しくは http://pear.php.net/manual/en/installation.checking.php#installation.checking.cli.phpdir で説明されています。
プロジェクトのルートからのファイルをcodeigniter
にインクルードしているときに同じエラーが発生しました。プロジェクトのcommon.php
でこれを使用していました。
<?php include_once base_url().'csrf-magic-master/csrf-magic.php'; ?>
に変更しました
<?php include_once ('csrf-magic-master/csrf-magic.php'); ?>
今は正常に動作しています。