Как включать файл вне корня документа?

Sleep(0) уже обсуждалось здесь .

Поскольку ваш процессор ничего не будет делать (23%), эта функция немедленно вернет . Попробуйте заменить его на что-то вроде Sleep(value) (значение в миллисекундах), чтобы фактически уменьшить использование вашего процессора.

17
задан Brayn 9 March 2010 в 11:43
поделиться

7 ответов

Вы не можете выполнить это, если действует open_basedir, что не позволяет PHP перемещаться из домашнего каталога.

Что вы можете сделать, это убедиться, что docroot1 и docroot2 принадлежат пользователям в одной и той же группе, соответственно установить права доступа к группе и использовать символическую ссылку от docroot2 к docroot1 для чтения другого корня сети.

Или пересоберите PHP и пусть он просто следует типичным * nix-разрешениям, как и любой другой процесс:)

9
ответ дан 30 November 2019 в 14:21
поделиться

Вы можете включать файлы из любого места, если только разрешения вашего PHP-скрипта или безопасный режим не препятствуют этому. Ваш первый подход совершенно нормален. Какие ошибки вы получаете?

Что касается комментариев, то они, похоже, подтверждают, что нет доступа из PHP к файлу, который определенно существует. Что касается того, что это может быть, Suhosin был исключен, единственное, о чем я могу думать, это PHP или Apache, которые являются своего рода chroot Jail:

Основное преимущество chroot jail в том, что jail ограничивает часть файловой системы, которую может видеть демон, корневым каталогом jail. Кроме того, поскольку jail должен поддерживать только Apache, программы, доступные в jail, могут быть крайне ограничены. Самое главное, нет необходимости в программах setuid-root, которые могут быть использованы для получения root-доступа и выхода из тюрьмы.

Я никогда не работал ни с чем подобным, поэтому не могу сказать, как это обнаружить (кроме как сделать glob() на /var/www/vhosts и посмотреть, что появится. Но я думаю, что это должно быть настроено администратором. Кто управляет вашей машиной?

2
ответ дан 30 November 2019 в 14:21
поделиться

то, что вы используете, - плохая практика. поместите зависимый код в специфичный для домена. Дублирование одного и того же кода - правильный подход, поскольку это не влияет на работу обоих сайтов.

Попробуйте создать символическую ссылку для file1.php и включить ее, как если бы она была из локального каталога.

также убедитесь, что в .htaccess для параметра followsymlink установлено значение true

как насчет того, чтобы попробовать это в вашем file2.php в domain2?

require_once '../../../domain1/httpdocs/file1 .php ';

0
ответ дан 30 November 2019 в 14:21
поделиться

Попробуйте выполнить chmod 777 на тестовом файле php, чтобы проверить, работает ли он, есть ли у вас проблемы с разрешениями. Также выполните простую phpinfo () и посмотрите, включен ли режим сохранения.

0
ответ дан 30 November 2019 в 14:21
поделиться

Что произойдет, если вы попытаетесь потребовать другой файл:

// test.php
<?php
   echo 'Hello World';
?>

// your file
require_once('test.php');

Это работает? Если да, поместите test.php в другое место и попробуйте снова. Работает ли он по-прежнему?

.
0
ответ дан 30 November 2019 в 14:21
поделиться

Я сижу здесь и гадаю, почему Вы не сделали символическую ссылку. Или я что-то пропустил? Вы можете сделать символическую ссылку на папку с необходимыми включениями на путь, к которому у вас есть доступ.

1
ответ дан 30 November 2019 в 14:21
поделиться

Это работает на паре машин, которыми я управляю

ini_set("include_path",".:/hsphere/local/home/user_name/other_domain.com");
require "filename.php";
2
ответ дан 30 November 2019 в 14:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: