что это значит "(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 не работает. Это дает ошибку в почте, поскольку

'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'

Ответ 1

Если вы посмотрите на постоянный PHP PATH_SEPARATOR, вы увидите, что это ":" для вас.

Если вы разделите свою строку ".: /Usr/share/pear: /usr/share/php", используя этот символ, вы получите 3 части

  • , (это означает текущий каталог, в котором находится ваш код)
  • /USR/доли/груша
  • /USR/доли/фот

Любые попытки включить()/require() вещи будут выглядеть в этих каталогах в этом порядке.

Он покажет вам, что в сообщении об ошибке вы узнаете, где он НЕ может найти файл, который вы пытаетесь потребовать()

Для вашего первого требуют, если это будет включено из вашего index.php, тогда вам не нужен материал dir, просто выполните:

require_once ( 'db/config.php');

Ответ 2

Решение проблемы

как упоминалось Uberfuzzy [настоящая причина проблемы]

Если вы посмотрите на постоянную PHP [PATH_SEPARATOR] [1], вы увидите, что это ":" для вас.

Если вы разделите свою строку ".: /Usr/share/pear: /usr/share/php", используя этот символ, вы получите 3 части

  • , (это означает текущий каталог, в котором находится ваш код)
  • /USR/доли/груша
  • /USR/доли/фот

Любые попытки включить()/require() вещи будут выглядеть в этих каталогах в этом порядке.

Он покажет вам, что в сообщении об ошибке вы узнаете, где он НЕ может найти файл, который вы пытаетесь потребовать()

Это было причиной ошибки.

Теперь приступим к решению

  1. Шаг 1. Найдите файл php.ini с помощью команды php --ini (в моем случае: /etc/php5/cli/php.ini)
  2. Шаг 2: найдите include_path в vi, используя esc затем нажмите /include_path затем enter
  3. Шаг 3: раскомментируйте эту строку, если она прокомментирована и включает ваш каталог сервера, ваш путь должен выглядеть так: include_path = ".: /usr/share/php: /var/www/<directory>/"
  4. Шаг 4: Перезапустите apache sudo service apache2 restart

Это оно. Надеюсь, поможет.

Ответ 3

На самом деле, решение заключается в том, чтобы открыть файл 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

Ответ 4

У меня была аналогичная проблема. Просто чтобы помочь кому-то с той же проблемой:

Моя ошибка была атрибутом файла пользователя для файлов в /var/www. После их изменения к пользовательскому "www-data" проблема исчезла.

Ответ 5

Это просто каталоги, показывающие, где PHP ищет ваш файл. Убедитесь, что cron1.php существует там, где вы думаете. И убедитесь, что вы знаете, где dirname(__FILE__) и $_SERVER['DOCUMENT_ROOT'] указывают, где вы ожидаете.

Это значение можно настроить в файле php.ini.

Ответ 6

У меня была такая же ошибка, включая файл из корня моего проекта в codeigniter Я использовал это в common.php моего проекта.

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

я изменил его на

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

Теперь работа хорошая.