在zip文件中包含php文件

时间:2014-12-22 19:03:39

标签: php zip

我在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

人们说这是对的,但对我来说,永远不会有效,我不知道我是不是把坏事或需要其他东西

最诚挚的问候

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_contentsDocs将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