2014-12-22 187 views
2

我在php.net,並在這個論壇裏面看到PHP文件本作包括壓縮文件的文件:包括zip文件

<?php 
include ("zip://./test.zip#file.php"); 
?> 

我創建一個名爲test.zip的zip文件,裏面放稱爲文件等文件。 PHP

的人都說,這讓file.php包括在其他PHP文件的zip文件中

我嘗試所有的時間,告訴我錯誤文檔不存在

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 

人們訴說這it's正確的,但對我來說,從來沒有工作,我不知道如果我把什麼不好或需要其他的東西

的問候

回答

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

+0

我在windows中創建zip文件,並在本例中在php中插入zip文件中的其他文件,並帶有一些代碼用於讀取或包含外部zip文件,我和你一樣給我錯誤,裏面的zip文件我有php文件,包括或嘗試包括,並告訴我錯誤我把,我嘗試在本地計算機服務器與Appserv, – Francisco

0

警告:這不能在內存中完成 - ZipArchive不能與「內存映射文件」工作。

有關下面的說明,帶有權力是責任,我們每個人都應確保沒有未經過濾的用戶輸入永遠以eval()結尾。

可以得到一個壓縮文件內的文件的數據轉換爲可變(存儲器)與file_get_contentsDocs,因爲它支持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,BDFL of PHP

+0

我嘗試其他時間,沒有工作,我所有的時間把我 警告:file_get_contents(zip://./test.zip#file.php)[function.file-get-contents]:無法打開流:C:\ AppServ \ www \ zip \ zip中沒有這樣的文件或目錄第13行的.php – Francisco

+0

你嘗試過哪一個 – ehime