PHP: Почему у меня readdir работает в командной строке, а не в браузере?

У меня есть 2 папки: /var/www/vhosts/mydomain.com/httpdocs/ и /var/www/vhosts/mydomain.com/httpdocs/duh/

Обе папки имеют ТОЧНО одинаковые права доступа, группу, владельца и все остальное.

Если я установлю $path первым, никаких проблем, я вывожу список файлов с «html» в имени файла.

Если я установлю $path на второй, он умрет в opendir(). Однако он отлично работает из командной строки, но не из браузера.

Любые идеи?

Вот мой очень простой код:

<?php
        $path = "/var/www/vhosts/mydomain.com/httpdocs/duh/";

        $img_folder = opendir($path) or die("Unable to open $path");

         while (false !== ($file = readdir($img_folder))){
             if (eregi("html", $file)){
                echo $file;
             }
         }
    ?>

person k00k    schedule 30.08.2010    source источник
comment
сними @ и ты хоть увидишь какую ошибку выдает, если ты не знал @ подавляет отчеты об ошибках вот почему ты не знаешь в чем причина   -  person Viper_Sb    schedule 30.08.2010
comment
Извините, я должен был снять это. Я кое-что тестировал, и это попало сюда. Я не использую это сейчас, я буду редактировать.   -  person k00k    schedule 30.08.2010
comment
Какую ошибку тогда выдает? (помимо невозможности открыть $path)   -  person Viper_Sb    schedule 30.08.2010
comment
[30 августа 13:02:50 2010] [ошибка] [клиент] Предупреждение PHP: opendir() [‹a href='function.opendir'›function.opendir‹/a›]: БЕЗОПАСНЫЙ РЕЖИМ Действует ограничение. Сценарию с uid 0 не разрешен доступ к /var/www/vhosts/mydomain.com/httpdocs/duh/, принадлежащему uid 10012, в /var/www/vhosts/mydomain.com/httpdocs/t.php в строке 4. [Пн, 30 августа, 13:02:50 2010] [ошибка] [клиент] Предупреждение PHP: opendir(/var/www/vhosts/mydomain.com/httpdocs/duh/) [‹a href='function.opendir'›function .opendir‹/a›]: не удалось открыть каталог: недопустимый ioctl для устройства в /var/www/vhosts/mydomain.com/httpdocs/t.php в строке 4   -  person k00k    schedule 30.08.2010
comment
Я должен отметить, что согласно моему /etc/php.ini safe_mode = Off;   -  person k00k    schedule 30.08.2010
comment
не доверяйте никакому конфигурационному файлу. доверять только phpinfo(). также упоминается фактическое местоположение файла php.ini   -  person Your Common Sense    schedule 30.08.2010


Ответы (3)


Какие права доступа к папке duh? Помните, что веб-сервер будет работать под другим идентификатором пользователя, чем ваша учетная запись оболочки. Убедитесь, что режим каталога 0755, чтобы его могли читать все пользователи.

ой, просто ваш комментарий с сообщением об ошибке. Итак, да, ошибка разрешений. duh принадлежит пользователю с идентификатором 10012, а ваш веб-сервер работает от имени пользователя root. безопасный режим этого не позволит. 'chown' каталог, которым будет владеть root...

Конечно, почему веб-сервер работает как root? Это ужасно небезопасно.

person Marc B    schedule 30.08.2010
comment
Perms 755, и я даже установил владельца папки на uid веб-сервера. - person k00k; 30.08.2010
comment
Веб-сервер работает как апач. Что заставило вас думать, что он работает как root? - person k00k; 30.08.2010

Что ж, теперь вы знаете ответ: это SAFE_MODE, одна из самых уродливых функций PHP.
Есть несколько обходных путей, но лучший из них — бежать с этого хоста как можно быстрее!
или найти способ его отключить.

person Your Common Sense    schedule 30.08.2010

Я понял. Сервер, над которым я работаю, имеет локальные файлы конфигурации для каждого виртуального хоста. safe_mode был включен для локальной конфигурации.

Спасибо тем, кто вел меня по этому пути.

person k00k    schedule 30.08.2010