У меня проблемы с простым чдиром и требуют.
Из первого файла: web / index_cluster.php
Я пытаюсь загрузить второй: ezpublish_legacy / index_cluster.php
Мой требуемый файл не загружается, но я понятия не имею, почему …
Вот мой конфиг.
Нет ничего в журнале ezpublish и допустимом объеме памяти в apache
PHP Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 240 bytes) in /path/to/my/www/web/index_cluster.php on line 11
Вот мое (упрощенное) дерево
www
`-- ezpublish_legacy
|-- index_cluster.php
`-- web
|-- index_cluster.php
Вот оригинальный код
$legacyRoot = '/path/to/my/www/ezpublish_legacy';
chdir( $legacyRoot );
require 'index_cluster.php';
И вот мое исправление
$legacyRoot = '/path/to/my/www/ezpublish_legacy';
chdir( $legacyRoot );
require '/path/to/my/www/ezpublish_legacy/index_cluster.php';
Я перепробовал все, что мог придумать:
$legacyRoot = '/path/to/my/www/ezpublish_legacy';
require $legacyRoot.'/index_cluster.php';
=> За работой
$legacyRoot = '/path/to/my/www/ezpublish_legacy';
echo getcwd() . "\n";
chdir( $legacyRoot );
echo getcwd() . "\n";
die()
require 'index_cluster.php';
=> именно то, что я ожидаю
/path/to/my/www/web
/path/to/my/www/ezpublish_legacy
Загрузка с абсолютным путем и проверка текущего каталога в загруженном файле дает ожидаемый результат
Интернет / index_cluster.php
require '/path/to/my/www/ezpublish_legacy/index_cluster.php';
ezpublish_legacy / index_cluster.php
echo getcwd() . "\n";
die();
результат в (что я ожидаю)
/path/to/my/www/web
Интернет / index_cluster.php
$legacyRoot = '/path/to/my/www/ezpublish_legacy';
chdir( $legacyRoot );
require '/path/to/my/www/ezpublish_legacy/index_cluster.php';
ezpublish_legacy / index_cluster.php
echo getcwd() . "\n";
die();
результат в (что я ожидаю)
/path/to/my/www/ezpublish_legacy
Обновление: я пробовал что-то новое:
require "/index_cluster.php" => instant fail
Предупреждение PHP: требуется (/index_cluster.php): не удалось открыть поток: нет такого файла или каталога в /path/to/my/www/web/index_cluster.php в строке 11
require "index_cluster.php" => trying loading for 10 seconds then fail
Неустранимая ошибка PHP: допустимый объем памяти 536870912 байт исчерпан (попытка выделить 240 байт) в /path/to/my/www/web/index_cluster.php в строке 11
include
или же require
который не начинается с ./
, /
или в Windows буква диска отличается от других с помощью include_path
, Чтобы решить вашу непосредственную проблему, вы можете использовать
require "./index_cluster.php"
использовать фиксированный относительный путь. Вы пробовали абсолютный путь /index_cluster.php
который будет смотреть на корень файловой системы, а не на фактическое местоположение.
Когда не используется эта форма, но простой
require "index_cluster.php"
это будет искать через include_path
, include_path
на моей системе выглядит так:
$ php -r 'echo ini_get("include_path");'
.:/usr/share/php:/usr/share/pear
Поэтому PHP будет искать эти файлы по порядку:
./index_cluster.php
/usr/share/php/index_cluster.php
/usr/share/pear/index_cluster.php
Использование include_path плохо, потому что некоторые системы настроены неправильно и пропускают .
и это занимает больше времени. Кроме того, и это то, что вас поражает, для обработки требуется немного больше памяти, поэтому в этом случае вы превышаете ограничение памяти. Чтобы исправить это на более длительный срок, вы должны проанализировать код, если вы можете уменьшить использование памяти и, если нет, возможно, увеличить memory_limit
в php.ini
,
Конфигурация PHP об «include_path» создает «цикл» и ограничение памяти, потому что мои 2 файла имеют одинаковое имя.
Таким образом, web / index_cluster.php загружается бесконечно сам вместо загрузки ezpublish_legacy / index_cluster.php
какая конфигурация мне не подходит, потому что это конфигурация iso-production, которую я не могу изменить.
Доступное решение (выберите одно)