Php 什么';这段代码是错误的:文件从远程压缩文件中获取内容并解压缩到本地目录
此代码的目的是从中央服务器提取upgrade.zip,将其解压缩并放置在常驻服务器上的文件夹中。我没有收到任何错误,它只是导致死亡(“!出现问题。请重试!”)Php 什么';这段代码是错误的:文件从远程压缩文件中获取内容并解压缩到本地目录,php,Php,此代码的目的是从中央服务器提取upgrade.zip,将其解压缩并放置在常驻服务器上的文件夹中。我没有收到任何错误,它只是导致死亡(“!出现问题。请重试!”) 您应该调查$zip->open()中的返回值。它可以是以下任何一种: 另外,为什么不尝试使用您喜爱的解压程序手动打开下载的zip文件,以检查文件是否确实有效?您可以将远程zip文件的内容转换为字符串。。。但是你永远不会把它保存在任何地方。这就是问题所在-你需要把zip文件的内容写进ABSPATH。'wp-content/themes/my
您应该调查
$zip->open()
中的返回值。它可以是以下任何一种:
另外,为什么不尝试使用您喜爱的解压程序手动打开下载的zip文件,以检查文件是否确实有效?您可以将远程zip文件的内容转换为字符串。。。但是你永远不会把它保存在任何地方。这就是问题所在-你需要把zip文件的内容写进ABSPATH。'wp-content/themes/mytheme/upgrade.zip'-现在你只是把文件保存在内存中-它实际上不存在于磁盘上。@ignacio-例如,我只熟悉move\u upload\u file($source,$saved\u file\u location)。如何从文件内容中保存文件?使用
fopen()
、fwrite()
和fclose()
@Andy>谢谢您的帮助。我不知道如何指定fwrite()的目标。例如,我可以使用$myfile=fwrite($target);然后将$myfile发送到openZip?openZip($myfile)?@Scott-file\u put\u contents可能是一个更好的选择-我相信它是fopen()、fwrite()和fclose()的包装器-您只需将文件名和从远程服务器下载的数据传递给它,然后将相同的文件名传递给您的openZip方法。不要使用if($x==true)您应该在对象上使用try/catch,这也可以让你得到准确的错误。
require('../../../wp-blog-header.php');
function openZip($file_to_open) {
global $target;
$zip = new ZipArchive();
$x = $zip->open($file_to_open);
if($x === true) {
$zip->extractTo($target);
$zip->close();
unlink($file_to_open);
} else {
die("!There was a problem. Please try again!");
}
}
$payload = file_get_contents('http://myserver.com/upgrade.zip');
if(isset($payload))
{
$filename = 'upgrade.zip';
$source = file_get_contents('http://myserver.com/upgrade.zip');
$target = ABSPATH.'wp-content/themes/mytheme/';
// permission settings for newly created folders
$chmod = 0755;
$saved_file_location = $target . $filename;
openZip($saved_file_location);
}
ZIPARCHIVE::ER_EXISTS
ZIPARCHIVE::ER_INCONS
ZIPARCHIVE::ER_INVAL
ZIPARCHIVE::ER_MEMORY
ZIPARCHIVE::ER_NOENT
ZIPARCHIVE::ER_NOZIP
ZIPARCHIVE::ER_OPEN
ZIPARCHIVE::ER_READ
ZIPARCHIVE::ER_SEEK