DiegoP.
DiegoP.

Reputation: 45737

PHP zip Function issue

Hello I am usign the below code to zip a package on upload:

$nameFile = $_FILES['file']['name'];
$tmpName = $_FILES['file']['tmp_name'];
$download_folder = './CopyrightFiles/';

$zip = new ZipArchive();
$fileconpress = $download_folder.$nameFile.".zip";

$conpress = $zip->open($fileconpress, ZIPARCHIVE::CREATE);
if ($conpress === true)
{

    $zip->addFile($tmpName);
    $zip->close();
    echo $fileconpress."<br/>";
    echo "yess !! Success!!!! ";
}
else echo " Oh No! Error";

It seems to work ok.

But there are two issues.

First issue it saves the file also with the original extension, something like : image.JPG.zip

Also when I then move the zip package to my local computer (Mac) and I open the ZIP inside I can find only a tmp folder with a binary file inside and NOT the image or the file that should be there!

What the hell is going on?

Please advise

Thank you

Upvotes: 1

Views: 157

Answers (2)

simshaun
simshaun

Reputation: 21466

Issue #1:
You need to manually remove the extension:

$filename = explode('.', $_FILES['file']['name']);
$filename = $filename[0];


Issue #2:
$tmpName does not contain the filename of the file. You need to pass the $localname parameter in addFile(). See http://php.net/manual/en/function.ziparchive-addfile.php.

Upvotes: 1

Marc B
Marc B

Reputation: 360672

That's because your "binary" file is just the temporary name that PHP used to temporarily stored the uploaded file as. That's why it's "tmp_name" in the $_FILES array.

Try this:

$zip->addFile($tmpName, $nameFile);

The second parameter lets you specify what the file's name should be within the zip.

To prevent 'file.jpg.zip', try:

$fileconpress = $download_folder .  pathinfo($_FILES['file']['name'], PATHINFO_FILENAME) . ".zip";

Upvotes: 1

Related Questions