用PHP上传文件 - 解压缩和移动

时间:2013-05-28 17:33:04

标签: php wordpress file-upload

我有一个非常基本的,非常简单的函数,它接受一个文件(在检查它之后确保它的拉链等)并上传它,解压缩它等等:

public function theme(array $file){ 
        global $wp_filesystem;

        if(is_dir($wp_filesystem->wp_content_dir() . "/themes/Aisis-Framework/custom/theme/")){
            $target_path = $wp_filesystem->wp_content_dir() . "/themes/Aisis-Framework/custom/theme/";
            if(move_uploaded_file($file['tmp_name'], $target_path . '/' . $file['name'])) {
                $zip = new ZipArchive();
                $x = $zip->open($target_path);
                if ($x === true) {
                    $zip->extractTo($target_path); // change this to the correct site path
                    $zip->close();

                    //unlink($target_path);
                }
                $this->success('We have uplaoded your new theme! Activate it bellow!');
            } else {    
                $this->error('Oops!', 'Either your zip is corrupted, could not be unpacked or failed to be uploaded. 
                    Please try again.');
            }
        }else{
            $this->error('Missing Directory', 'The Directory theme under custom in Aisis Theme does not exist.');
        }

        if(count(self::$_errors) > 0){
            update_option('show_errors', 'true');
        }

        if(count(self::$_messages) > 0){
            update_option('show_success', 'true');
        }

    }

非常基本,是的,我已将目标路径用作上传路径和解包(我应该使用不同的路径,默认情况下似乎使用/tmp/tmp_name

注意: $ file是$ _FILES ['some_file']的数组;

我的问题是:

Warning: move_uploaded_file(/var/www/wordpress/wp-content//themes/Aisis-Framework/custom/theme//newtheme.zip): failed to open stream: Permission denied in /var/www/wordpress/wp-content/themes/Aisis-Framework/CoreTheme/FileHandling/Upload/Upload.php on line 82

Warning: move_uploaded_file(): Unable to move '/tmp/phpfwechz' to '/var/www/wordpress/wp-content//themes/Aisis-Framework/custom/theme//newtheme.zip' in /var/www/wordpress/wp-content/themes/Aisis-Framework/CoreTheme/FileHandling/Upload/Upload.php on line 82

这基本上意味着“哦,你想要移动的文件夹是root所拥有的,不管你不能这样做。”我正在移动的文件夹也是由apache,www-data拥有的。 - 我有完整的读/写/执行(它是localhost)。

所以提问时间:

  • 我上传到和移动到文件夹应该不同吗?
  • 如果在现场环境中,因为这是一个WordPress主题,那么能够上传文件的用户是否能够绕过这个“你没有权限”?

2 个答案:

答案 0 :(得分:3)

你应该尝试使用wordpress方式。将所有用户内容上传到wp-content / uploads,并使用本机函数执行。

正如您所提到的,上传到自定义目录可能是非技术精明用户的问题。 / uploads已经拥有特殊权限。

结帐wp_handle_upload。您只需要限制文件的mime类型。

答案 1 :(得分:-1)

您尝试上传的路径是错误的

可湿性粉剂内容//主题

尝试删除一个斜杠