۷ سید رسول موسویان
header دانلود jpg در php
جامعه پی اچ پی ایجاد شده در ۰۸ اردیبهشت ۱۴۰۱

سلام

وقتتون بخیر

برای دانلود فایل jpeg از طریق header در php میتونید راهنمایی کنید که کدوم بخش نیاز به تغییر داره ؟

if(file_exists($name)) {
    header('Content-Description: File Transfer');
    header("Content-type: image/jpeg");
    header('Content-Disposition: attachment; filename="'.basename($name).'"');
    header('Expires: 0');
    header('Cache-Control: no-store, no-cache');
    header('Pragma: public');
    header('Content-Length: ' . filesize($name));
    flush();
    readfile($url);
    die();
} else {
    http_response_code(404);
    die();
}

در حال حاضر فایل jpg درست دانلود نمیشه

یک دانلودر نوشتم برای وبسایت freepik در https://fpdl.ir/ که کاربر اول باید دکمه get image رو بزنه تا تصویر با کیفیت از فری پیک به سرور منتقل بشه و سپس download رو بزنه تا بتونه دانلود یا مشاهده بکنه

میخوام این مسیر رو کوتاه‌تر کنم و وقتی یک دکمه رو زد هم به سرور منتقل بشه و پس از انتقال با header به فایل منتقل شده هدایت بشه و دانلود شروع بشه

نمونه لینک تصویر که میتونید استفاده کنید برای تست :

https://img.freepik.com/free-photo/solar-pannels-wind-power-plant-outside_23-2149352234.jpg?t=st=1651155687~exp=1651156287~hmac=e9ecafb1f2ad24fbc3b631ecca2c2551789954d59ab35bacc521e9e84fb3ff56&w=826

    readfile($url);
    readfile($name);


سید رسول موسویان ۰۸ اردیبهشت ۱۴۰۱، ۱۶:۳۰

سلام دوست عزیز

یک فایل رو بصورت دستی و جدای فریپیک بهش بدین ببینید کار میکنه یا نه برنامتون

    header('Content-Disposition: attachment; filename="hello.png"');

بخش بالا هم دستی وارد کنید

محمد گازری ۰۸ اردیبهشت ۱۴۰۱، ۱۶:۳۰

به این شکل مشکلی نداره

header('Content-Description: File Transfer');
header("Content-type: image/jpeg");
header('Content-Disposition: attachment; filename="x.jpg"');
header('Expires: 0');
header('Cache-Control: no-store, no-cache');
header('Pragma: public');
header('Content-Length: ' . filesize('x.jpg'));
flush(); // Flush system output buffer
readfile('x.jpg');

ظاهرا توی نام و ... مشکلی رخ میده

سید رسول موسویان ۰۸ اردیبهشت ۱۴۰۱، ۱۶:۴۶

ظاهرا کدهای بخش‌ها دیگه تداخلاتی دارند

بالاتر

file_put_contents

استفاده شده

میتونه مشکل ایجاد کنه؟

چون به صورت خالی میزارم مشکلی ندارم ولی همین تیکه کد بالا که درست بود رو بعد اینا میزارم باز هم فایل مشکل داره

سید رسول موسویان ۰۸ اردیبهشت ۱۴۰۱، ۱۶:۵۱

بحث ایجاد فابل رو در کلاس یا فایل دیگه پیش ببرید

محمد گازری ۰۸ اردیبهشت ۱۴۰۱، ۲۰:۱۴

ممنون

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

نیاز بود از ob_clean استفاده بشه


ob_clean();
flush();
readfile($name);

اگر برای دوستان مورد مشابهی پیش اومد از این مورد میتونن استفاده کنند

سید رسول موسویان ۰۹ اردیبهشت ۱۴۰۱، ۰۶:۰۶

بسیارعالی

ممنون بابت اشتراک حل مشکلتون

بهترین پاسخ
محمد گازری ۰۹ اردیبهشت ۱۴۰۱، ۰۶:۲۲