PDA

View Full Version : سوال: ارسال فایلهای فشرده بر روی کلاینت



janbozorgi
یک شنبه 05 آبان 1387, 10:16 صبح
با سلام
با کمک کدهای زیر یک فایل فشرده شده (zip) رو میخواهم روی سیستم کلاینت ارسال نمایم. بعد از ارسال وقتی که روی فایل دریافت شده کلیک میشود سیستم عامل پیام (ویندوز نمیتواند این پوشه را باز کند) مشاهده میشود. در صورت نبود زحمت کد رو اصلاح بفرمایید.
با تشکر




$zipname='ziped.zip';
header("Pragma: public");
header("Expires: 20");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/force-download");
header("Content-Disposition: attachment; filename=".$zipname);
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($zipname));
readfile("$zipname");

love4php
چهارشنبه 08 آبان 1387, 01:19 صبح
مشکلی اینجا نیست .. آیا
1- فایل زیپ شما درسته ؟
2-روی سرور درستش میکتی ؟
3- مشکل که از خطت نیست ؟

janbozorgi
چهارشنبه 08 آبان 1387, 09:23 صبح
مشکلی اینجا نیست .. آیا
1- فایل زیپ شما درسته ؟
2-روی سرور درستش میکتی ؟
3- مشکل که از خطت نیست ؟

با سلام
فایل زیپ درسته چون بطور معمول روی سرور باز میشه بدون مشکل.
بله برای ذخیره در پروفایل کاربر روی سرور ذخیره میشه.

ولی هنوز مشکل بقوت خودش باقی و بنده هم بشدت معطل این قضیه ام.
با تشکر

javad_hosseiny
چهارشنبه 08 آبان 1387, 21:24 عصر
بنده خیلی وقت کدی جهت بک آپ گیری از کل محتویات دیتابیس داشتم که بعد از فراخوانی کلیه محتویات جداول بصورت دستورات sql تحت یک فایل آن را فشرده کرده و به تاریخ جاری آن را دان لود می نمود.

که کد مربوط به فشرده سازی و دان لود آن را در ذیل قرار دادم .

این کد فایل موردنظر (که البته می تواند شامل فایلها نیز باشد) را فشرده کرده و سپس دانلود می کند.



ob_start();
$file = 'table.txt';
$newfile = basename($file);
$ExtDn = pathinfo($newfile);
$ExtDn = $ExtDn["extension"];
$zipnamefile = substr($file,0, strlen($file)-strlen($ExtDn)) . 'zip';
require_once('zip.php');
$archive = new PclZip($zipnamefile);
if ($archive->create($file) == 0) {
die('Error : '.$archive->errorInfo(true)); }
$file = $zipnamefile;
$file = 'Location: http://www.'.$SERVER_NAME.'/'.$zipnamefile;
Header($file);
در کد فوق بنده از همان کلاس معروف pclzip فایل موردنظر را زیپ کرده و نام فایل پیش فرض آن table.txt می باشد که شما می توانید نام آن را پارامتریک ارسال نمایید.
و حتی جهت فراخوانی از مسیرهای مختلف (مسیر آن را ) نیز بصورت پارامتریک به کد فوق ارسال نمایید.
جهت اطمینان بیشتر فایل zip.php را بنده مجددا آپلود نمودم.

javad_hosseiny
چهارشنبه 08 آبان 1387, 21:33 عصر
کد مربوط به پشتیبان گیری جداول دیتابیس و دان لود آن:


include('date.php');
$date = m2sh(date(Y), date(m), date(d), 2);
$ddate = $date[0] .'-' . $date[1] .'-' . $date[2];
header("Content-type: text/plain");
header('Content-type: application/text');
header('Content-Disposition: inline; filename= data'.$ddate .'.txt');
$num_table =0;
$counter = 0;
include('connect.php');
$local_query = 'SHOW TABLES FROM '. $db_name;
$result = mysql_query($local_query);
if ($result != FALSE && mysql_num_rows($result) > 0) {
$tables = array();
while ($tmp = mysql_fetch_row($result)) {
$tables[$num_table] = $tmp[0];
$num_table++;
}
}
mysql_free_result($result);
if ($num_table == 0) {
echo 'no any table in database';
exit;
}
for ($iz=0;$iz<$num_table;$iz++) {
$table = $tables[$iz];
echo "truncate `$table`\n";
$query=mysql_query("select * from `$table`");
while ($row=mysql_fetch_row($query)):
$flag='';
$flist="insert into `$table` values (";
foreach ($row as $andis => $value){
$value=addslashes($value);
$value=ereg_replace("\r\n","<br>",$value);
$value=ereg_replace("\r","",$value);
$flist=$flist.$flag.'"'.$value.'"';
$flag=' , ';
}
$flist.=')';
$flist=mysql_escape_string ($flist);
$flist=ereg_replace('\(/\"' , '("' , $flist);
$flist=stripslashes($flist);
echo $flist."\n";
$counter++;
endwhile;
}
mysql_close($connect);


و باز جهت راحتی دوستان فایل data.php (که مربوط به تبدیل تاریخ میلادی به شمسی هست) را مجددا اینجا آپلود می کنم.

والبته با ترکیب این دو کد (وقابلیتهای کلاس pclzip) شما می توانید این فایل را نیز بصورت فشرده دان لود نمایید.