簡體   English   中英

用PHP創建的Zip文件顯示在localhost上,而不顯示在服務器上

[英]Zip File created with PHP shows on localhost but not on server

我是PHP新手,這是我的難題。 我正在嘗試向我的站點添加一項功能,該功能允許用戶在Flash(AS3)中選擇一組圖像,然后單擊一個按鈕,並讓我的服務器為所有圖像創建一個zip文件供他們下載。

我已經在閃存中編寫了代碼,創建了PHP腳本,並在本地主機上對其進行了測試,一切正常。 但是,當我將相同文件上傳到服務器時,不會創建zip文件。 以下是我的Flash和php的代碼。 我在她身上苦苦掙扎的任何幫助或技巧都將不勝感激。

Localhost服務器正在使用5.2.17,因此如果我的服務器托管在1&1上

Flash代碼將信息發送到PHP

function MakeZip():void
{
var variables:URLVariables = new URLVariables();
//variables.Image1=img1;
variables.ImageList=OrderItems;
variables.Name= zipName_txt.text + ".zip";
variables.FileComplete="File Created";

var request:URLRequest = new URLRequest();

request.url="ArrayTest.php";

request.data=variables;
var loader:URLLoader = new URLLoader();

loader.load(request);//sends the request 
//when the request is done loading, it goes to the completeWriting function
loader.addEventListener(Event.COMPLETE, completeWriting);
loader.addEventListener(IOErrorEvent.IO_ERROR, error);

function completeWriting(event:Event):void
{
    info_txt.text = "File Created";
}

function error(e:IOErrorEvent):void
{
    info_txt.text = "There was an error. Please try again later.";
}

}

PHP創建文件

<?PHP

$zipName= $_GET['Name'];
$Order= $_GET['ImageList'];
$fileList = explode('|',$Order);
$ZipComplete = $_GET['FileComplete'];


// create object
$zip = new ZipArchive();

// open archive 
if ($zip->open($zipName, ZIPARCHIVE::CREATE) !== TRUE) {
die ("Could not open archive");
}

// add files
foreach ($fileList as $f) {
$zip->addFile($f) or die ("ERROR: Could not add file: $f"); 
print false;  
}

// close and save archive
$zip->close();
//writeVariable( "ZipComplete", $ZipComplete);
echo "FileComple=" . $ZipComplete; 

?> 

謝謝大家的提示。 經過數小時的嘗試,我發現錯誤出在我的閃存代碼中。 在我的本地主機上,它忽略文件名的大寫。 但是在我的服務器上,它不會忽略它。 我的Flash文件中包含image1.jpg,但文件名實際上是Image1.jpg。 很高興我發現它有點令人沮喪,因為這樣的小事使它無法正常工作。

有沒有從您的PHP腳本返回的錯誤響應? 請確保服務器上的zip文件保存路徑正確並且具有寫訪問權限

這是因為代碼在服務器上以“ nobody”的身份運行。 該用戶對/ tmp以外的任何地方都沒有寫權限。

添加以下代碼,這應該可以工作:

<?PHP

$zipName= $_GET['Name'];
$Order= $_GET['ImageList'];
$fileList = explode('|',$Order);
$ZipComplete = $_GET['FileComplete'];


// create object
$zip = new ZipArchive();

$zipName = "/tmp/" + $zipName;

// open archive 
if ($zip->open($zipName, ZIPARCHIVE::CREATE) !== TRUE) {
die ("Could not open archive");
}

$ zipName =“ / tmp /” + $ zipName; 是關鍵部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM