Не можете разархивировать с помощью PHP? - PullRequest
0 голосов
/ 21 декабря 2009

У меня проблемы с использованием PHP для распаковки загруженного файла. Я могу загрузить нормально, ZIP-файл копируется туда, куда он должен, но он не распаковывается. Каталог и zip корректно выполняются chmod до 777. Журналы ошибок apache просто показывают «Ошибка: невозможно создать [whatfile]» для каждого файла в .zip. Есть идеи, почему это происходит? Ценить это! Скажите, пожалуйста, относится ли это к stackoverflow, но, похоже, это проблема apache / os / somethingelse. Код следует:

<?php
$target_path = "/home/someuser/hostgames/";

mkdir($target_path . basename($_FILES['uploadedfile']['name'],".zip") . "/",0777);
chmod($target_path . basename($_FILES['uploadedfile']['name'],".zip") . "/",0777);


$target_path =$target_path . basename($_FILES['uploadedfile']['name'],".zip") . "/";

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);



if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['name']).
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}


echo "<br/>Path is: $target_path<br/>";
echo "<br/>Command is: unzip $target_path<br/>";
shell_exec("chmod 777 $target_path");
shell_exec("unzip $target_path");


?>

Ответы [ 2 ]

1 голос
/ 06 марта 2014

Попробуйте с этим кодом. Я думаю, что этот код поможет вам .... Примечание: поддержка класса ZipArchive PHP 5> = версия 5.2.0. Пожалуйста, проверьте вашу версию PHP. Создайте одну папку здесь в вашей корневой папке.

    $path = 'New folder.zip';
$zip = new ZipArchive;
$f = 0;
    if ($zip->open($path) === true) 
    {                    
        for($i = 0; $i < $zip->numFiles; $i++) 
        {                  
            if($zip->extractTo('extracthere/', array($zip->getNameIndex($i))))
            {
                $f = 1;
            }
            else
            {
                $f = 0; 
            }                
        }  
        $zip->close();                   
    }
    if($f==0)
    {
        echo 'Prolem';  
    }
    else
    {
        echo 'Done';
    }
0 голосов
/ 01 декабря 2014

Я нашел решение, используя команду терминала SH для выполнения 2 команд сценария в одной строке

 exec( "sh -c \"cd " . $path . " && unzip " . $path  . $filename . " -d " . $folder . "\"" );

, которая генерирует что-то вроде:

sh -c "cd /var/www/project-X/wp-content/uploads/raw/ && unzip /var/www/project-x/wp-content/uploads/raw/filename.zip -d folderName"

Это прекрасно работаетмне

...