不確定這是否可行,但現在它已成爲一項學術鬥爭。PHP zip_open()和php:// temp,似乎無法打開
使用__halt_compiler()
伎倆在一個PHP文件中嵌入二進制數據,我已經成功地創建了自開幕腳本將fseek()
到__COMPILER_HALT_OFFSET__
(不是太難看,因爲這精確的例子是在手動記錄)
不管怎麼說,我已經存儲的二進制數據ZIP的小疙瘩(含一個單一的文件,上面寫着「世界你好」一個文件夾中)我呼籲__halt_compiler()
我所試圖做的是後將數據直接複製到php://temp
流,並已成功完成(如果我rewind()
和passthru()
臨時流手柄,它轉儲數據)
$php = fopen(__FILE__, 'rb');
$tmp = fopen('php://temp', 'r+b');
fseek($php, __COMPILER_HALT_OFFSET__);
stream_copy_to_stream($php, $tmp);
我的問題帶有努力現已開放php://temp
與zip_open()
$zip = zip_open('php://temp');
從我所看到的(儘管其他類似的POSS由於缺少流支持,因此
zip_open()
)這裏的問題是句柄之間的數據流php://memory
和php://temp
內在的固有非永久性。如果這可以解決,也許它實際上是可能的。
它保持踢回錯誤碼11
,我已發現上沒有 文檔(貌似,像大多數其他可能的錯誤代碼)
var_dump($zip); // int(11)
正如@cweiske指出的,錯誤代碼
11 = ZipArchive::ER_OPEN
,無法打開文件
這對我嘗試使用php://temp
流或其他可能的問題有何影響?我也知道存在OOP方法(ZipArchive
,等人),但我想我會從基礎開始。
任何想法?
Alrighty,所以錯誤代碼** 11 **是一個**錯誤打開**根據http://www.php.net/manual/en/function.ziparchive-open.php#102849關於'ZipArchive '班。我會假設這轉換爲類將是一個包裝到相同的擴展功能。 – Dan
當試圖解壓存儲在'c:\ windows \ temp'中的文件時,先前鏈接的註釋還提到了在不同的Windows操作系統上返回的所述錯誤當我嘗試使用可以轉儲到的'php:// temp'流一個文件,當數據長度超過上限時,它不會在那裏,反正我切換到'php:// memory',仍然導致**錯誤打開**。 – Dan
謝謝@Gordon - *編輯*;不寫,只實際閱讀。 – Dan