دانلود تصویر با URL و ذخیره روی سرور

دانلود تصویر URL با PHP – در این آموزش با استفاده از لینک عکسی که کاربر در فیلد وارد می کند تصویر را دانلود کرده و در سرور خودمان ذخیره می کنیم .
توجه داشته باشید که یکسری محدودیت های از جمله لیست زیر برای ذخیره در سرور در نظر گرفته ایم :
- محدودیت فرمت فایل که باید jpg / png / gif باشد
- محدودیت حجم فایل که زیر 3 مگابایت باشد
- عرض زیر 1920 و ارتفاع زیر 1200 باشد
دموی برنامه
اسکریپت index.php
<?php
if (@$_POST['image-url'])
require_once "process.php";
?>
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="UTF-8">
<title>Rapidcode.iR - سورس کد</title>
<link rel="stylesheet" href="./static/css/main.css">
</head>
<body>
<div class="container">
<a id="introduce" href="https://rapidcode.ir" target="_blank">رپید کد • کتابخانه مجازی برنامه نویسان</a>
<form method="POST">
<input type="url" name="image-url" id="image-url">
<input type="submit" value="ذخیره روی سرور">
</form>
<?php if (isset($image_content_url)) : ?>
<h3>پیش نمایش تصویر دانلود شده روی سرور</h3>
<img width="200" height="200" src="<?php echo $image_content_url ?>">
<?php endif; ?>
</div>
</body>
</html>
اسکریپت process.php
این script وظیفه بررسی فایل قبل از ذخیره شدن روی سرور را دارد که باید با توجه به محدودیت ها شرایط را بررسی کند .
<?php
$image_url = $_POST['image-url'];
$file_headers = get_headers($image_url, true);
$timestamp = time();
$filepath = "content/img-{$timestamp}";
// allowed data
$allowed_image_max_filesize = 3145728; // 3MB
$allowed_image_type = [IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG];
$allowed_image_sizes = ["width" => 1920, "height" => 1200];
// image info
$image_size_info = @getimagesize($image_url);
$image_filesize = @$file_headers['Content-Length'];
$image_size = ["width" => $image_size_info[0], "height" => $image_size_info[1]];
$image_type_int = $image_size_info[2];
if (in_array($image_type_int, $allowed_image_type)) {
if ($allowed_image_max_filesize < $image_filesize) {
die("حجم تصویر بیشتر از {$allowed_image_max_filesize} بایت می باشد");
} else if ($allowed_image_sizes['width'] < $image_size['width'] || $allowed_image_sizes['height'] < $image_size['height']) {
die("عرض و ارتفاع تصویر نباید بیشتر از {$allowed_image_sizes['width']} باشد");
}
$file_content = file_get_contents($image_url);
if(!$file_content)
die("خطایی در دریافت فایل از سرور رخ داده");
$extension = image_type_to_extension($image_type_int, true);
$filepath .= $extension;
$is_moved = !is_bool(file_put_contents($filepath, $file_content));
if($is_moved)
$image_content_url = "{$_SERVER['HTTP_REFERER']}{$filepath}";
} else {
die("فرمت فایل باید png / jpg / gif باشد");
}
?>
ارسال نظر