Search code examples
phpsafe-mode

Getting around PHP safe mode to write to server. Is it possible?


I have got the following problem since the server has safe mode turned on, and directories are being created under different users:

  1. I upload my script to the server, it shows as belonging to 'user1'. All it is doing is making a new directory when a new user is created so it can store files in it.
  2. New directory is created, but it belongs to 'apache' user.
  3. 'user1' and 'apache' are different users; and safe mode is turned on. So the php script cannot write to that newly created directory.
  4. Now I have a problem!

One solution is to turn off safe mode. Also, a coworker suggested that there are settings that can be changed to ensure the directories are under the same user as the script. So I am looking to see if latter can be done.

But I have to ask. Is there a programatical solution for my problem?

I am leaning to a 'no', as safe mode was implemented to solve it at the php level. Also the actual problem may seem like the directory being created under a different user, so a programatic fix might just be a band-aid fix.


Solution

  • I've used this workaround:

    instead of php mkdir you can create directories by FTP with proper rights.

        function FtpMkdir($path, $newDir) {
           $path = 'mainwebsite_html/'.$path;
           $server='ftp.myserver.com'; // ftp server
           $connection = ftp_connect($server); // connection
    
    
           // login to ftp server
           $user = "[email protected]";
           $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
          }
    
      }