Zip-файл, созданный с помощью PHP, отображается на локальном хосте, но не на сервере - PullRequest
0 голосов
/ 22 марта 2011

Я новичок в PHP, и вот моя дилемма.Я пытаюсь добавить на свой сайт функцию, позволяющую пользователям выбирать набор изображений во Flash (AS3), нажимать кнопку и заставлять мой сервер создавать zip-файл со всеми изображениями для их загрузки.

Я уже написал свой код во флэш-памяти и написал свой php-скрипт и проверил его на своем локальном хосте, и все отлично работает.Но когда я загружаю те же файлы на свой сервер, zip-файлы не создаются.Ниже приведен код как для моей вспышки, так и для моего php.Буду признателен за любую помощь или советы, я борюсь за нее.

Локальный сервер использует 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; 

?> 

Ответы [ 3 ]

1 голос
/ 25 марта 2011

Спасибо всем за советы и подсказки.После нескольких часов проб разных вещей я обнаружил, что ошибка была в моем флеш-коде.На моем локальном хосте он игнорирует заглавные буквы для имен файлов.Однако на моем сервере это не игнорируется.У меня был флэш-файл image1.jpg, но на самом деле имя файла - Image1.jpg.Рад, что я нашел это немного расстраивающим, как такая мелочь заставила его не работать.

0 голосов
/ 22 марта 2011

Это потому, что код выполняется на сервере как «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; является ключевой частью.

0 голосов
/ 22 марта 2011

есть ли какие-либо сообщения об ошибках, возвращенные из вашего php-скрипта?пожалуйста, убедитесь, что путь сохранения в zip-файле на сервере указан правильно и у вас есть права на запись

...