ورود

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : مشکل با فایل zip در php



masoum
September 25th, 2011, 16:59
سلام
من یه برنامه ای دارم مینویسم که یه فولدر میگیره و تمام فایلها و زیر فولدرهای اون رو به یه فایل زیپ تبدیل میکنه. ولی به بعضی از فایلها که میرسه پیغام میده که نمیتونه اون فایل رو به فایل زیپ اضافه کنه و دیگه فایل زیپ رو نمیسازه. در صورتی که خود اون فایل ایرادی نداره و باز میشه. مشکل از کجاست ؟

camelian77
September 25th, 2011, 17:20
پرمیژن ها شاید؟ از چه کلاسی استفاده می‌کنید؟

Rezash
September 25th, 2011, 17:36
دلايل مختلفي ميتونه داشته باشه
چيزهايي كه خودم بهش برخورد كردم مثل فولدرهاي خالي،فايل هاي خالي ، نام هاي غير استاندارد، مشكلات پرميشن و ... هستند
بهرحال همه اين ها بستگي داره كدتون رو چجوري نوشته باشيد ، بدون مشاهده كد نميشه نظر فني داد.

masoum
September 25th, 2011, 18:02
همه موارد بالا رو چک کردم ولی ایرادی نداره !
کدش این هست:
path = "D:/new";
ini_set("max_execution_time", 300);
$zip = new ZipArchive();
if ($zip->open($path . "/my_zip.zip", ZIPARCHIVE::CREATE) !== TRUE)
{
die ("Could not open archive");
}
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path . "/"));
foreach ($iterator as $key=>$value)
{
if ($zip->addFile(realpath($key), $key)) or die ("ERROR: Could not add file: $key");
}
$zip->close();
$file = $path . '/my_zip.zip';
header("Expires: 0");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Content-type: application/pdf");
header('Content-length: '. filesize($file));
header('Content-disposition: attachment; filename='.basename($file));
readfile($file);
unlink($file);

camelian77
September 25th, 2011, 18:21
نمونه‌ی دقیق تر این کد توی php.net بخش معرفی کلاس zip هست که به صورت یک تابع recursive نوشته شده. اونو استفاده کنید.

masoum
September 25th, 2011, 18:33
من کدهای زیادی رو امتحان کردم اما فقط از همین کد جواب گرفتم. توی php.net هم چیزی پیدا نکردم واسه زیپ کردن. اگه آدرس دقیق صفحه ای که میگین رو بذارین ممنون میشم

m3hdi
September 25th, 2011, 18:52
http://php.net/manual/en/book.zip.php
http://php.net/manual/en/ref.zip.php
http://davidwalsh.name/create-zip-php

camelian77
September 25th, 2011, 19:31
لینک هایی که دوستمون این بالا دادن کاملا کار شما رو راه می‌ندازه. ولی به هر حال این (http://stackoverflow.com/questions/1334613/how-to-recursively-zip-a-directory-in-php) رو هم ببینید.

masoum
September 26th, 2011, 12:56
مشکلم حل شد. ممنون از همه. کدی که از سایت stackoverflow.com برام گذاشتین کامل بود
فقط یه سوال دیگه دارم. الان زمانی که فایل زیپ رو میسازه، داخل فایل زیپ به همون ترتیبی که بهش مسیر داده شده، از روت هارد فولدر تو فولدر میسازه و یکی یکی باید فولدرها باز بشه که به فولدر موردنظر که زیپ شده برسم (یعنی از روت هارد، مسیر رو نشون میده تو فایل زیپ). که این از نظر امنیت خیلی مشکل داره. چطور میشه این مشکل رو حل کرد به طوری که زمانی که فایل زیپ رو باز میکنم فقط فولدر مورد نظر که میخوام زیپ بشه رو نشون بده نه اینکه از ابتدای هارد مسیر رو یکی یکی نشون بده ؟؟؟؟

camelian77
September 27th, 2011, 12:28
باید برید و متد



getDirTree
رو نگاه کنید, یه آرگومان می گیره که path ها رو relative یا absolute می کنه.

masoum
September 27th, 2011, 18:00
میشه لطف کنید دقیق تر بگید این متد رو از کجا باید پیدا کنم و چطوری ازش استفاده کنم ؟
ممنون