我不是原生的PHP開發人員,但我會盡我所能找到並一起破解,所以請原諒,如果這不會造成太多感覺:創建一個ZIP文件腳本不會創建ZIP(無錯誤)
我有一個簡單的(看來)腳本,在URL中有兩個參數。一個是簡單的字符串(要創建的ZIP的標題),另一個是序列化的音頻軌道陣列,指向需要壓縮的服務器上的文件。這些話通就好了,並反序列化等,這裏的腳本:
<?php
$audioTitleVar = unserialize(rawurldecode($_GET['audioTitle']));
$audioArrayVar = unserialize(rawurldecode($_GET['audioArray']));
function create_zip($files = array(), $destination = '', $overwrite = true) {
if(file_exists($destination) && !$overwrite) { return false; }
$valid_files = array();
if(is_array($files)) {
foreach($files as $file) {
if(file_exists($_SERVER['DOCUMENT_ROOT'] . str_replace("http://mydomain.com","", $file))) {
$valid_files[] = $_SERVER['DOCUMENT_ROOT'] . str_replace("http://mydomain.com","", $file);
}
}
}
if(count($valid_files)) {
$zip = new ZipArchive();
if($zip->open($destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
return false;
}
foreach($valid_files as $file) {
$just_name = preg_replace("/(.*)\/?([^\/]+)/","$2",$file);
$zip->addFile($file,$just_name);
//$zip->addFile($file,$file);
}
//echo '<p>The zip archive contains ' . $zip->numFiles . ' files with a status of ' . $zip->status . '</p>';
$zip->close();
return file_exists($destination);
} else {
return false;
}
}
$fileName = $_SERVER['DOCUMENT_ROOT'] . '/wp-content/themes/jones/zip/' . $audioTitleVar . '.zip';
create_zip($audioArrayVar, $fileName, true);
//echo '<p>File Path: ' . $fileName . '</p>';
var_dump(file_exists($fileName));
?>
我在這裏想我真正的問題是,雖然該腳本沒有錯誤...沒有ZIP創建。隨着時間的推移,我將某些部分的輸出放在函數中,看看它是否到達那裏,而且它是 - 所以我難以忍受這一點。
我真的需要的是你們中的一個人掃描腳本,看看有沒有什麼明顯的東西顯示不出來!
難道這是一個權限的事情? PHP應該運行在CGI模式還是Apache?或者這沒有什麼區別?
該腳本的骨骼取材於:http://davidwalsh.name/create-zip-php,但即使僅使用該版本,它也從未運行過。
PS - 我只想補充一點,如果我取消註釋告訴我在ZIP等文件中有多少文件的行,它似乎會返回正確的信息......但最終檢查文件存在返回false。
你的腳本是可怕的不安全。抓住我們想要的任何文件(嗯,Web服務器可以訪問)並將其壓縮起來很容易。你會得到什麼錯誤?錯誤報告是?你是否已經加入了一些調試'echo'語句來確保你的代碼在應該被執行的地方執行? – Brad
嗨布拉德,是的,它可能是非常不安全的,但我只是需要得到它現在的工作,並會在稍後嘗試收緊它。在報告IS時出錯。如果我寫一些廢話,我會發現錯誤很好。回聲(你看到評論)確實輸出很好。即使是告訴我在檔案中有多少個文件的行!奇怪的。謝謝你快速的回覆。 –
這可能會簡化它,但是你檢查了文件夾的權限嗎? – Ash