PDA

View Full Version : سوال: عکس به جای نمایش ، دانلود شود



mamali-mohammad
دوشنبه 22 فروردین 1390, 16:05 عصر
سلام
فرض کنیم یه باتون داریم
روش که کلیک میشه یه عکس رو در مرورگر باز میکنه
حالا میخوام عکس در مرورگر باز نشه
دانلود بشه
باید چیکار کنم ؟
ممنون

UnnamE
دوشنبه 22 فروردین 1390, 18:06 عصر
content-type رو بسته به فايل ات به Header بفرست

eshpilen
دوشنبه 22 فروردین 1390, 19:41 عصر
اینو امتحان کردم کار میکنه:

<?php
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=test.jpg');
echo file_get_contents('test.jpg');
?>

mamali-mohammad
دوشنبه 22 فروردین 1390, 21:43 عصر
ممنون
من باید برای هر پست مجزا چنین کاری کنم
این کد رو اینطوری کردم :

if (isset($_GET['id'])){
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; upload_images/'. $id .'_'. $entitle .'.jpg');
file_get_contents('upload_images/'. $id .'_'. $entitle .'.jpg');
...
االان روی هر پستی که کلیک می کنم دیگه وارد نمیشه و میخواد دانلود کنه

eshpilen
دوشنبه 22 فروردین 1390, 22:18 عصر
بنظرم بعد از attachment باید فقط اسم فایل باشه، نه مسیر دایرکتوری و اینا! باید upload_images/ رو از قسمت هدر مربوطه بردارید.
ضمنا حواستون باشه که یوقت نام فایلها غیرعادی نباشن. یعنی مثلا در نام فایل اگر فاصله یا کاراکترهای غیر ASCII باشن ممکنه مشکل پیش بیاد. چون اونطور که در منابع اومده برای درج چنین نامهایی باید تبدیل خاصی روشون صورت بگیره.

mamali-mohammad
دوشنبه 22 فروردین 1390, 23:33 عصر
تست کردم
جواب نداد
به نظرتون مشکل از کجاست ؟

eshpilen
دوشنبه 22 فروردین 1390, 23:50 عصر
تمام کدت رو عینا درج کن تا بررسیش کنیم.

mamali-mohammad
چهارشنبه 24 فروردین 1390, 00:36 صبح
کجاشو بزارم ؟
کدهام زیاده

eshpilen
چهارشنبه 24 فروردین 1390, 08:59 صبح
هرجاش فکر میکنی مربوط هست بذار. بعد اگر بیشتر لازم بود بهت میگیم بقیش رو هم بذاری.
البته انتظار نداشته باش کسی کد شما رو اگر زیاد و پیچیده باشه کامل و دقیق بخونه و باگیابی کنه. برنامه رو شما خودت باید بنویسی و باگیابی کنی. مگر موارد ساده و روشن و کوتاه یا توضیحات خوب و کافی بدی که کار راحت بشه.
میخوای بجاش اصلا یه نمونه کد برات بذارم؟
شما میخوای چی بشه دقیقا؟ مثلا میخوای کاربر روی یک دکمه که کلیک میکنه، کادر دانلود مرورگر برای سیو کردن یک عکس باز بشه؟ یا جور دیگه؟

.fatemeh
چهارشنبه 24 فروردین 1390, 09:50 صبح
سلام
منم همین مشکل رو دارم
کدهام روی لوکال کار می کنه ولی وقتی روی هاست می زارم ، کار نمی کنه
البته می خوام وقتی روی نام فایل که لینک هست کلیک می کنیم کادر دانلود برای سیو کردن عکس باز بشه
لینک عکس به صفحه downloadfile.php می ره، داخل این صفحه کدهای زیر هست:

<?php
$FileName='test.png';
$FilePath="images/service/";
$size = filesize($FilePath . $FileName);
header("Content-Type: application/force-download;");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ". $size);
header("Content-Disposition: attachment; filename=\"". $FileName ."\";");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
echo (readfile($FilePath . $FileName));
?>

ممنون می شم راهنمایی کنین

mamali-mohammad
چهارشنبه 24 فروردین 1390, 10:11 صبح
سلام
داداش من یه صفحه اصلی دارم
آخرین پست ها میاد توش
تا اینجا حله
حالا من روی هر پست که کلیک میکنم ، محتویاتش رو نشون میده
اینم آدرسش :

http://127.0.0.1/my/my.php?id=64
حالا توی این مسیر ، یه گزینه دانلود کنید داره که اگه روش کلیک بشه ، عکس مورد نظر ما دانلود میشه

مشکل اینجاست که اگه این کد رو در صفحه my.php میزارم ، زمانی که از صفحه اصلی روی پست مورد نظر کلیک می کنم ، مستقیما دانلود میشه !
نمی دونم چیکار کنم
ممنون

eshpilen
چهارشنبه 24 فروردین 1390, 10:27 صبح
حالا توی این مسیر ، یه گزینه دانلود کنید داره که اگه روش کلیک بشه ، عکس مورد نظر ما دانلود میشهمنظورت از مسیر چیه؟
یعنی در صفحهء http://127.0.0.1/my/my.php?id=64 یک گزینهء دانلود کنید داره؟
خب کد اون بخش دانلود کنید رو بذار.

مشکل اینجاست که اگه این کد رو در صفحه my.php میزارم ،کدوم کد رو؟

زمانی که از صفحه اصلی روی پست مورد نظر کلیک می کنم ، مستقیما دانلود میشه !چی دانلود میشه؟ صفحهء متن پست مورد نظر یا عکسه؟

eshpilen
چهارشنبه 24 فروردین 1390, 10:33 صبح
الان من اینو تست کردم کار میکنه:

test.php



<html>
<body>
<a href="download.php">download the picture</a>
</body>
</html>


download.php


<?php
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=test.jpg');
echo file_get_contents('test.jpg');
?>

.fatemeh
چهارشنبه 24 فروردین 1390, 11:32 صبح
توی کدهای من عکسی که قراره دانلود بشه با صفحه download.php توی یه مسیر نیست. از کجا می فهمه که test.jpg توی کدوم پوشه هست.
بازم می گم ، هم این کد هم کد قبلی خودم روی لوکال درست کار می کنه ولی روی هاست جواب نمی ده.
این خطا ظاهر میشه
Warning: Cannot modify header information - headers already sent by (output started at /home/......../public_html/administrator/downloadfile.php:9) in /home/.........../public_html/administrator/downloadfile.php on line 11

mamali-mohammad
چهارشنبه 24 فروردین 1390, 12:27 عصر
ممنون داداش
اوکی کردم
فدای شما

eshpilen
چهارشنبه 24 فروردین 1390, 13:17 عصر
توی کدهای من عکسی که قراره دانلود بشه با صفحه download.php توی یه مسیر نیست. از کجا می فهمه که test.jpg توی کدوم پوشه هست.



<?php
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename=test.jpg');
echo file_get_contents('your_path/test.jpg');
?>


این خطا ظاهر میشه
Warning: Cannot modify header information - headers already sent by (output started at /home/......../public_html/administrator/downloadfile.php:9) in /home/.........../public_html/administrator/downloadfile.php on line 11
این خطا که هزار بار مطرح شده. یه چیزی داره قبل از ارسال هدرها میره سمت کلاینت. حالا یا خودت کدی خط خالی ای چیزی گذاشتی یا انکدینگ فایلت BOM داره و از این حرفا. فایل PHP خودت رو ضمیمه کن بفرست تا بررسیش کنیم.

.fatemeh
پنج شنبه 25 فروردین 1390, 09:39 صبح
ممنون مشکل حل شد
قبل از هدر کد وجود داشت!!