сканирование / дома / с opendir () - PullRequest
3 голосов
/ 25 августа 2011

Можно ли сканировать каталог / home / с помощью opendir и scandir.Когда я пытаюсь выполнить сценарий exec, он говорит, что в доступе отказано, что мне делать?

<code><?php

$dir = '/home/';
$dirs = scandir($dir);
?>
<pre>
<?php print_r($dirs); ?>

Ответы [ 4 ]

6 голосов
/ 25 августа 2011

Вы можете использовать is_readable('/home/'), чтобы проверить, есть ли у вас разрешение.Если нет, вам нужно убедиться, что у каталога есть права на чтение, вероятно, 0755 (rwxr-xr-x)

2 голосов
/ 25 августа 2011

В целях безопасности PHP определяет 'basedir', ниже которого вам запрещен доступ.Как говорит Алекс Г., есть также права доступа к файлу.

Этот вопрос говорит о том, как обойти ограничения basedir: Как мне ослабить ограничение open_basedir в PHP?

Ответ Тома Хейя скопирован сюда:

Вы также можете легко сделать это для каждого каталога, используя конфигурационный файл Apache (предполагается, что это ваш веб-сервер) (например, httpd.conf)

<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir "/var/www/vhosts/domain.tld/httpdocs:/var/www/vhosts/domain.tld/zend"
</Directory>

Вы также можете полностью снять ограничение с помощью

<Directory /var/www/vhosts/domain.tld/httpdocs>
php_admin_value open_basedir none
</Directory>
0 голосов
/ 25 августа 2011

Ответ на ваш вопрос: это проблема с разрешениями. Скорее всего, процесс, под которым работает Apache, не имеет разрешения на чтение каталога /home (или вашего usernamd, если работает в CLI). Вручную сделайте это в терминале:

ls -ld /home

и проверьте атрибуты.

0 голосов
/ 25 августа 2011

Я не программист PHP, но я думаю, что ваша проблема в том, что когда PHP пытается использовать opendir, он работает с тем же идентификатором пользователя, что и apache, который может не иметь разрешения на чтение вашего каталога / home.

Это можно исправить, изменив разрешения для / home или добавив идентификатор пользователя apache к любой группе, которой принадлежит группа home.

Возможно, это проблема в вашем файле конфигурации Apache.Даже если разрешения файловой системы это позволят, ваш файл httpd.conf может не разрешить доступ к / home.Обычно это имеет место, если все ваши HTML-файлы находятся в /var/www.

httpd.conf может быть настроен так, чтобы разрешать обслуживание файлов из домашних каталогов ваших пользователей.В этом случае разрешение будет предоставлено для каталогов внутри / home, но не для самого / home.

...