Начало работы в безопасном режиме PHP для записи на сервер. Является ли это возможным?

StackOverflow https://stackoverflow.com/questions/252615

  •  05-07-2019
  •  | 
  •  

Вопрос

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

<Ол>
  • Я загружаю свой скрипт на сервер, он отображается как принадлежащий 'user1'. Все, что он делает, это создает новый каталог при создании нового пользователя, чтобы он мог хранить в нем файлы.
  • Новый каталог создан, но он принадлежит пользователю apache.
  • 'user1' и 'apache' - разные пользователи; и безопасный режим включен. Таким образом, скрипт php не может писать в этот недавно созданный каталог.
  • Теперь у меня проблема!
  • Одним из решений является отключение безопасного режима. Кроме того, коллега предположил, что есть параметры, которые можно изменить, чтобы гарантировать, что каталоги находятся под тем же пользователем, что и скрипт. Поэтому я смотрю, можно ли это сделать.

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

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

    Это было полезно?

    Решение

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

    вместо 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
          }
    
      }  
    

    Другие советы

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

    php_value safe_mode = Off
    

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

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

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

    chmod g + s каталог

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top