Начало работы в безопасном режиме PHP для записи на сервер. Является ли это возможным? - PullRequest
2 голосов
/ 31 октября 2008

У меня возникла следующая проблема, так как на сервере включен безопасный режим и каталоги создаются под разными пользователями:

  1. Я загружаю свой скрипт на сервер, он отображается как принадлежащий 'user1'. Все, что он делает, это создает новый каталог при создании нового пользователя, чтобы он мог хранить в нем файлы.
  2. Новый каталог создан, но он принадлежит пользователю 'apache'.
  3. 'user1' и 'apache' - разные пользователи; и безопасный режим включен. Таким образом, скрипт php не может писать в этот новый каталог.
  4. Теперь у меня проблема!

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

Но я должен спросить. Есть ли программное решение для моей проблемы?

Я склоняюсь к «нет», так как был реализован безопасный режим для его решения на уровне php. Также фактическая проблема может показаться, что каталог создается другим пользователем, поэтому программное исправление может быть просто исправлением.

Ответы [ 3 ]

4 голосов
/ 31 октября 2008

Я использовал этот обходной путь:

вместо php mkdir вы можете создавать каталоги по FTP с соответствующими правами.

    function FtpMkdir($path, $newDir) {
       $path = 'mainwebsite_html/'.$path;
       $server='ftp.myserver.com'; // ftp server
       $connection = ftp_connect($server); // connection


       // login to ftp server
       $user = "user@myserver.com";
       $pass = "password";
       $result = ftp_login($connection, $user, $pass);

       // check if connection was made
       if ((!$connection) || (!$result)) {
          return false;
          exit();
       } else {
         ftp_chdir($connection, $path); // go to destination dir
         if(ftp_mkdir($connection, $newDir)) { // create directory
             ftp_site($connection, "CHMOD 777 $newDir") or die("FTP SITE CMD failed.");
             return $newDir;
         } else {
           return false;
         }

         ftp_close($connection); // close connection
      }

  }  
0 голосов
/ 20 января 2012

У меня был некоторый успех с установкой группового бита каталога загрузки на липкий. Затем PHP может создавать внутри него каталоги и писать в него.

http://en.wikipedia.org/wiki/Setuid#setuid_and_setgid_on_directories

chmod g + s каталог

0 голосов
/ 31 октября 2008

Возможно, вы сможете отключить безопасный режим для определенного каталога с помощью файла .htaccess (если используется Apache).

php_value safe_mode = Off

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

...