我在php.net和本论坛中看到这包含来自zip文件的文件:
<?php
include ("zip://./test.zip#file.php");
?>
我创建名为test.zip的zip文件,并在其中放入名为file.php的其他文件
人们说,这包括在其他php文件中的zip文件中包含file.php
我一直试着告诉我错误文件不存在
Warning: include(zip://test.zip#file.php) [function.include]: failed to open stream: No such file or directory in C:\AppServ\www\zip\zip.php on line 2
Warning: include() [function.include]: Failed opening 'zip://test.zip#file.php' for inclusion (include_path='.;C:\php5\pear') in C:\AppServ\www\zip\zip.php on line 2
人们说这是对的,但对我来说,永远不会有效,我不知道我是不是把坏事或需要其他东西
最诚挚的问候
答案 0 :(得分:0)
以下代码无任何问题:
<强> page.php文件强>
<?php
include("zip://./include.zip#include_me.php");
?>
<强> include_me.php 强>
echo "File was included successfully!";
您遇到的问题表明ZIP文件本身存在问题。一个常见的错误是ZIP文件包含一个目录,并且所有压缩文件都包含在所述目录中。
我建议您仔细检查您的ZIP文件,以确保只压缩文件,而不是文件和目录。
如果意外包含该目录,您的文件可能位于zip://./test.zip#test/file.php
答案 1 :(得分:0)
警告 :这不能在内存中完成 - ZipArchive
无法使用“内存映射文件”。
关于下面的说明,权力是责任,我们每个人都应该确保没有未经过滤的用户输入在eval()中结束。
您可以使用file_get_contents
Docs将zip文件中的文件数据获取到变量(内存)中,因为它支持zip://
Stream wrapper Docs:
$zipFile = './test.zip'; # path of zip-file
$fileInZip = 'file.php'; # name the file to obtain
# read the file's data:
$path = sprintf('zip://%s#%s', $zipFile, $fileInZip);
$fileData = file_get_contents($path);
eval($fileData);
您只能使用zip://
或ZipArchive访问本地文件。为此,您可以先将内容复制到临时文件中并使用它:
$zip = 'http://www.domain.com/test.zip';
$file = 'file.php';
$ext = pathinfo($zip, PATHINFO_EXTENSION);
$temp = tempnam(sys_get_temp_dir(), $ext);
copy($zip, $temp);
$data = file_get_contents("zip://$temp#$file");
unlink($temp);
eval($data);
或者您可以通过
来获取此信息$fp = $zip->getStream('file.php');
if(!$fp) exit("failed\n");
while (!feof($fp)) {
$contents .= fread($fp, 1024);
}
fclose($fp);
eval($contents);
请保持以下内容:
如果eval()是答案,你几乎肯定会问 错误的问题。 - Rasmus Lerdorf,PHP的BDFL