Se déplacer en mode sans échec PHP pour écrire sur le serveur. C'est possible?

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

  •  05-07-2019
  •  | 
  •  

Question

J'ai le problème suivant depuis que le mode sans échec est activé sur le serveur et que des répertoires sont créés sous différents utilisateurs:

  1. Je télécharge mon script sur le serveur, il apparaît comme appartenant à "utilisateur1". Tout ce qu’il fait est créer un nouveau répertoire quand un nouvel utilisateur est créé pour pouvoir y stocker des fichiers.
  2. Un nouveau répertoire est créé, mais il appartient à l'utilisateur 'apache'.
  3. 'utilisateur1' et 'apache' sont des utilisateurs différents; et le mode sans échec est activé. Donc, le script php ne peut pas écrire dans ce répertoire nouvellement créé.
  4. Maintenant, j'ai un problème!

Une solution consiste à désactiver le mode sans échec. En outre, un collègue a suggéré que certains paramètres puissent être modifiés pour garantir que les répertoires se trouvent sous le même utilisateur que le script. Je cherche donc à voir si cela peut être fait.

Mais je dois demander. Existe-t-il une solution programmatique à mon problème?

Je me penche vers un "non", car le mode sans échec a été mis en œuvre pour le résoudre au niveau php. De plus, le problème réel peut sembler comme si le répertoire était créé sous un autre utilisateur. Un correctif de programmation peut donc n'être qu'un correctif de type band-aid.

Était-ce utile?

La solution

J'ai utilisé cette solution de contournement:

au lieu de php mkdir, vous pouvez créer des répertoires par FTP avec les droits appropriés.

    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
      }

  }  

Autres conseils

Vous pourrez peut-être désactiver le mode sans échec pour un répertoire spécifique via un fichier .htaccess (s'il est sur Apache).

php_value safe_mode = Off

Vous devrez peut-être demander à votre fournisseur d’hébergement d’effectuer ce changement pour vous dans le fichier httpd.conf.

J'ai réussi à définir le bit groupe du répertoire de téléchargement sur collant. PHP peut alors créer des répertoires à l'intérieur et y écrire.

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

chmod g + s répertoire

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top