Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
绕过PHP安全模式写入服务器。可能吗?_Php_Safe Mode - Fatal编程技术网

绕过PHP安全模式写入服务器。可能吗?

绕过PHP安全模式写入服务器。可能吗?,php,safe-mode,Php,Safe Mode,我遇到以下问题,因为服务器已打开安全模式,并且正在不同用户下创建目录: 我将脚本上传到服务器,它显示为属于“user1”。它所做的只是在创建新用户时创建一个新目录,以便在其中存储文件 已创建新目录,但它属于“apache”用户 “user1”和“apache”是不同的用户;安全模式开启。因此php脚本无法写入新创建的目录 现在我有问题了 一种解决方案是关闭安全模式。另外,一位同事建议可以更改一些设置,以确保目录与脚本位于同一用户下。所以我想看看后一种方法是否可行 但我不得不问。我的问题有一个程序

我遇到以下问题,因为服务器已打开安全模式,并且正在不同用户下创建目录:

  • 我将脚本上传到服务器,它显示为属于“user1”。它所做的只是在创建新用户时创建一个新目录,以便在其中存储文件
  • 已创建新目录,但它属于“apache”用户
  • “user1”和“apache”是不同的用户;安全模式开启。因此php脚本无法写入新创建的目录
  • 现在我有问题了 一种解决方案是关闭安全模式。另外,一位同事建议可以更改一些设置,以确保目录与脚本位于同一用户下。所以我想看看后一种方法是否可行

    但我不得不问。我的问题有一个程序化的解决方案吗


    我倾向于说“不”,因为安全模式是在php级别实现的。此外,实际问题看起来像是在不同的用户下创建的目录,所以程序修复可能只是一个创可贴修复。

    您可以通过一个.HTAccess文件(如果在Apache上)为特定目录关闭安全模式。
    尽管在httpd.conf中,您可能需要让主机提供商为您进行此更改。

    我使用了以下解决方法:

    您可以通过具有适当权限的FTP创建目录,而不是php mkdir

        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
          }
    
      }  
    

    我已经成功地将上传目录的组位设置为sticky。 PHP然后可以在其中创建目录并写入

    chmodg+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
          }
    
      }