web-dev-qa-db-ja.com

「(include_path = '。:/ usr / share / pear:/ usr / share / php')」とはどういう意味ですか?

私は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`
17
ketul shah

PHP constant PATH_SEPARATOR を見ると、「:」であることがわかります。

その文字を使用して文字列「。:/ usr/share/pear:/ usr/share/php」を分解すると、3つの部分が得られます

  • (これは、コードが置かれている現在のディレクトリを意味します)
  • / usr/share/pear
  • / usr/share/ph

Include()/ require()を試みると、これらのディレクトリがこの順序で検索されます。

エラーメッセージで、require()しようとしていたファイルが見つからなかった場所を知らせることを示しています。

最初のrequireで、index.phpに含まれている場合は、dirを必要としません。

require_once ( 'db/config.php');
11
Uberfuzzy

問題の解決策

uberfuzzy [問題の実際の原因]で述べたように

PHP定数[PATH_SEPARATOR] [1]を見ると、 ":"であることがわかります。

その文字を使用して文字列「。:/ usr/share/pear:/ usr/share/php」を分解すると、3つの部分が得られます

  • (これは、コードが置かれている現在のディレクトリを意味します)
  • / usr/share/pear
  • / usr/share/ph

Include()/ require()を試みると、これらのディレクトリがこの順序で検索されます。

エラーメッセージで、require()しようとしていたファイルが見つからなかった場所を知らせることを示しています。

それがエラーの原因でした。

解決に近づいています

  1. ステップ1:コマンドphp --iniを使用してphp.iniファイルを見つけます(私の場合は/etc/php5/cli/php.ini
  2. ステップ2escを使用してviでinclude_pathを見つけ、/include_pathを押してからenterを押します
  3. ステップ3:コメントを付けてサーバーディレクトリを含めると、その行のコメントを解除します。パスはinclude_path = ".:/usr/share/php:/var/www/<directory>/"のようになります。
  4. ステップ4:Apache Sudo service Apache2 restartを再起動します

これです。それが役に立てば幸い。

8
Abhishek Goel

同様の問題がありました。同じ問題を抱えている人を助けるためだけに:

私のエラーは、/ var/www内のファイルのユーザーファイル属性です。それらをユーザー「www-data」に戻した後、問題はなくなりました。

1
Gaston

実際には、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 で説明されています。

1
Ivan Aranibar

プロジェクトのルートからのファイルをcodeigniterにインクルードしているときに同じエラーが発生しました。プロジェクトのcommon.phpでこれを使用していました。

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

に変更しました

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

今は正常に動作しています。

0
Bugfixer