نماد سایت امپراطوری من

لینک غیر مستقیم برای فایل ها در PHP – بخش اول

لینک غیر مستقیم برای فایل ها در PHP - بخش اول

در این آموزش می خواهیم نحوه ایجاد لینک غیر مستقیم برای فایل ها را در زبان برنامه نویسی PHP فرا بگیریم. ایجاد لینک غیر مستقیم برای فایل ها می تواند امکانات سودمندی برای ما فراهم آورد. از جمله این امکانات می توان به محدود کردن سرعت دانلود، فعال/غیرفعال کردن قابلیت ادامه دادن دانلود، تغییر دادن لینک دانلود فایلها بدون نیاز به جابجایی آنها به منظور جلوگیری از سوء استفاده دیگر سایت ها، اعمال محدودیت برای دسترسی به فایل ها و… اشاره کرد. برای ساخت لینک غیرمستقیم برای فایل ها، باید اقدامات زیر را انجام دهیم:

[checklist]

[/checklist]

[divider]

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

محدود کردن دسترسی به دایرکتوری ها توسط فایل .htaccess انجام می شود. برای انجام این کار به دایرکتوری مورد نظر بروید و فایل .htaccess را در آن ایجاد کرده و کد زیر را در آن قرار دهید:


Deny From All

از این پس اگر کاربری تلاش کند تا بطور مستقیم به این دایرکتوری و فایل های آن دسترسی داشته باشد، با خطای ۴۰۳ به معنای ممنوعیت دسترسی مواجه خواهد شد.

[divider]

تولید لینک غیر مستقیم منحصر به فرد برای هر فایل

فرض کنید صفحه ای که قرار است اطلاعات را ذخیره کند، save.php باشد. برای اینکه این صفحه بتواند کار خود را به درستی انجام دهد، باید اطلاعات را به وسیله فرم به آن ارسال کنیم(آپلود کنیم). برای این منظور به یک فرم ساده آپلود نیاز خواهیم داشت :


<!DOCTYPE html>
<html>
<body>

<form action="save.php" method="post"
enctype="multipart/form-data">
<label for="file">نام فایل: </label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="ارسال">
</form>

</body>
</html>

در صفحه save.php ضمن ذخیره کردن فایل در دایرکتوری مورد نظر(که محدودیت دسترسی بر روی آن اعمال شده)، باید نام فایل، نوع و حجم آن را در دیتابیس ذخیره کنیم. همچنین باید برای هر فایل یک ID منحصر به فرد تولید کنیم. برای تولید این ID می توانیم از تابع زیر کمک بگیریم.

محتوای فایل GUID.php:


<?php

function GUID()
{
if (function_exists('com_create_guid') === true)
{
return trim(com_create_guid(), '{}');
}

return sprintf('%04X%04X-%04X-%04X-%04X-%04X%04X%04X',
mt_rand(0, 65535), mt_rand(0, 65535), mt_rand(0, 65535),
mt_rand(16384, 20479), mt_rand(32768, 49151), mt_rand(0, 65535),
mt_rand(0, 65535), mt_rand(0, 65535));
}

?>

هر بار که این تابع فراخوانی شود، خروجی آن یک مقدار متفاوت و غیرتکراری خواهد بود. در کنار این تابع نیازمند تابع دیگری برای ذخیره ی اطلاعات در دیتابیس خواهیم بود. این تابع می تواند مانند کد زیر باشد.

محتوای فایل SaveData.php


<?php
include 'GUID.php';
function SaveData($fileName, $fileType, $fileSize){

$con=mysqli_connect("localhost","user","pass","database");
// Check connection
if (mysqli_connect_errno()) {
return "Failed to connect to MySQL: " . mysqli_connect_error();
}
    $gid = GUID();
    $sql = "INSERT INTO myfiles
    VALUES ('$fileName', '$fileType','$fileSize','$gid')";
if(!mysqli_query($con,$sql))
    die('Error: ' . mysqli_error($con));

mysqli_close($con);

return "Successfully Saved!";

}
?>

در کد بالا به جای user و  pass و database به ترتیب نام کاربری و کلمه عبور مربوط به کاربر اضافه شده به دیتابیس و نام دیتابیس را قرار دهید. اکنون به کمک این توابع می توانیم صفحه save.php را کدنویسی کنیم.

محتوای فایل save.php:

<?php
include 'SaveData.php';

$fname = $_FILES["file"]["name"];
$ftype = $_FILES["file"]["type"];
$fsize = $_FILES["file"]["size"];

if ($_FILES["file"]["error"] > 0) {
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
} else {
echo "Upload: " . $fname . "<br>";
echo "Type: " . $ftype . "<br>";
echo "Size: " . ($fsize / 1024) . " kB<br>";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";
if (file_exists("upload/" . $_FILES["file"]["name"])) {
echo $fname . " already exists. ";
} else {
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $fname);
echo "Stored in: " . "upload/" . $fname;
SaveData($fname, $ftype, $fsize);
}
}
?>

برای ساخت جدول مربوطه نیز می توان از کد SQL زیر کمک گرفت:


CREATE TABLE `myfiles` (
`FileName` varchar(50) COLLATE utf8_persian_ci NOT NULL,
`FileType` varchar(50) COLLATE utf8_persian_ci NOT NULL,
`FileSize` varchar(20) COLLATE utf8_persian_ci NOT NULL,
`FileLink` varchar(50) COLLATE utf8_persian_ci NOT NULL
)

ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_persian_ci;

ALTER TABLE `myfiles`
ADD PRIMARY KEY (`FileLink`);

خب، قسمت آپلود و محدود کردن دسترسی مستقیم به فایل ها کدنویسی شد! در آموزش بعدی نحوه دانلود فایل ها از لینک غیر مستقیم را بررسی خواهیم کرد.
موفق و پیروز باشید…

خروج از نسخه موبایل