繁体   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