我有一个非常基本的,非常简单的函数,它接受一个文件(在检查它之后确保它的拉链等)并上传它,解压缩它等等:
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)。
所以提问时间:
答案 0 :(得分:3)
你应该尝试使用wordpress方式。将所有用户内容上传到wp-content / uploads,并使用本机函数执行。
正如您所提到的,上传到自定义目录可能是非技术精明用户的问题。 / uploads已经拥有特殊权限。
结帐wp_handle_upload。您只需要限制文件的mime类型。
答案 1 :(得分:-1)
您尝试上传的路径是错误的
可湿性粉剂内容//主题
尝试删除一个斜杠