بخش پنجم: متغیرهای سراسری در PHP

آموزش برنامه نویسی php

متغیرهای از پیش تعریف شده در PHP که همواره قابل دسترسی هستند و در هر جایی از برنامه می توان از آنها استفاده نمود. این متغیرها هر یک به صورت آرایه ای از مقادیر مختلف می باشند که شامل موارد زیر هستند:

$_GLOBALS) آرایه ای برای دسترسی به تمامی متغیرهای global می باشد. (اندیس آرایه شامل نام متغیرهاست)

$_SERVER) اطلاعاتی در مورد هدرها، مسیرها و مکان های اسکریپت در این متغیر نگهداری می شود.

$_REQUEST) حاوی اطلاعات مربوط به فرم HTML ارسالی می باشد.

$_POST) حاوی مقادیر داده های ارسالی به روش POST می باشد.

$_GET) حاوی مقادیر داده های ارسالی به روش GET می باشد.

$_FILES) حاوی اطلاعات فایلهای آپلود شده به برنامه از طریق روش POST به می باشد.

$_COOKIE) آرایه ای شامل مقادیر تمامی کوکی های تعریف شده در برنامه می باشد

$_SESSION) آرایه ای شامل مقادیر تمامی سشن های تعریف شده می باشد.

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

$_SERVER)

این آرایه شامل اطلاعات مربوط به هدرها و مسیرهای اسکریپت است که مهم­ترین آنها به شرح جدول زیر هستند:

المان توضیح
$_SERVER[‘PHP_SELF’] نام فایل در حال اجرا را بر می گرداند
$_SERVER[‘SERVER_ADDR’] آدرس IP سرور میزبان
$_SERVER[‘SERVER_NAME’] نام (دامنه) سرور میزبان
$_SERVER[‘REQUEST_METHOD’] روش ارسال درخواست (مانند post یا get)
$_SERVER[‘QUERY_STRING’] رشته پرس و جوی موجود در آدرس صفحه فعلی را برمی گرداند
$_SERVER[‘HTTP_REFERER’] آدرس URL صفحه ای که از طریق آن به صفحه فعلی مراجعه شده است
$_SERVER[‘HTTPS’] آیا درخواست ارسالی به اسکریپت از طریق پروتکل HTTPS است
$_SERVER[‘REMOTE_ADDR’] آدرس IP کاربر فعلی
$_SERVER[‘REMOTE_HOST’] نام میزبان کاربر فعلی
$_SERVER[‘REMOTE_PORT’] شماره پورتی که کاربر از طریق آن به وب سرور دسترسی دارد
$_SERVER[‘SCRIPT_NAME’] مسیر اسکریپت فعلی را بر می گرداند
$_SERVER[‘SCRIPT_URI’] آدرس URI صفحه فعلی را بر می گرداند

مثال: نمایش برخی از مقادیر متغیر سرور

 <?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_REFERER'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
?> 

$_POST)

اطلاعات فرم های HTML عمدتا به دو روش POST یا GET به سمت سرور ارسال می شوند. برای دسترسی به مقادیر فیلدهایی که با روش POST ارسال می شوند، از آرایه $_POST و برای دسترسی به مقادیر ارسالی با روش GET از آرایه $_GET استفاده می شود.

مثال:

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
  Name: <input type="text" name="fname">
  <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // collect value of input field
    $name = $_POST['fname'];
    if (empty($name)) {
        echo "Name is empty";
    } else {
        echo $name;
    }
}
?>

</body>
</html> 

در مثال فوق، مقادیر فرم HTML به صفحه جاری ارسال می شود. (ویژگی action موجود در تگ form بیانگر آدرس مقصد فرم ارسالی است). ابتدا با شرط if($_SERVER[“REQUEST_METHOD”] == “POST”) بررسی می شود که مقادیر به روش post ارسال شده باشند. سپس مقدار ارسالی فیلد fname (موجود در آرایه $_POST ) در متغیر $name قرار می گیرد و در صورت خالی نبودن به نمایش در می آید.

$_GET)

اطلاعات ارسالی به روش GET در این آرایه قرار می گیرند. این اطلاعات از طریق فرم هایی که با روش GET ارسال می شوند و یا URL ها (آدرس لینک ها) به سمت سرور فرستاده می شوند. مقادیر ارسالی به صورت رشته های پرس و جو (query string) در آدرس URL مقصد قرار می گیرند.

مثال:

<a href="test_get.php?subject=PHP&amp;web=W3schools.com">Test GET</a>

با کلیک بر روی لینک Test GET مقادیر subject و web با روش GET به صفحه test_get.php ارسال می شوند. عبارت پس از علامت سوال رشته پرس و جوی این آدرس را تشکیل می دهد. برای دسترسی به مقدار ارسالی پارامترهای subject و web باید از $_GET[‘subject’] و $_GET[‘web’] استفاده کرد:

<?php 
echo "Study " . $_GET['subject'] . " at " . $_GET['web'];
?>

$_REQUEST)

برای دسترسی به مقادیر ارسالی فرم های HTML می توان از آرایه $_REQUEST نیز استفاده کرد. این آرایه به طور پیش فرض شامل مقادیر آرایه های $_GET، $_POST و $_COOKIE می باشد.

$_FILES)

فایل های ارسالی به سمت سرور در این آرایه قرار می گیرند. همانند آرایه های $_POST و $_GET، برای دسترسی به فایل ارسالی باید از نام فیلد به عنوان آرایه استفاده نمایید. هر آیتم (فایل) ارسالی در آرایه $_FILES دارای کلیدهای زیر است (با فرض اینکه نام فیلد فایل ارسالی file1 است):

کلید توضیح
$_FILES[‘file1’][‘name’] نام فایل
$_FILES[‘file1’][‘tmp_name’] نام موقت فایل ( در واقع مسیر موقت فایل بر روی سرور)
$_FILES[‘file1’][‘type’] نوع فایل
$_FILES[‘file1’][‘size’] اندازه فایل (در واحد بایت)
$_FILES[‘file1’][‘error’] خطا در آپلود فایل (مقدار صفر بیانگر عدم وجود خطا است)

مثال: فرض کنید می خواهیم عکسی را بر روی سرور آپلود نماییم. کد ایجاد فرم به صورت زیر خواهد بود.

<!DOCTYPE html>
<html>
<body>

<form action="upload.php" method="post" enctype="multipart/form-data">
  Select image to upload:
  <input type="file" name="file1" id="fileToUpload">
  <input type="submit" value="Upload Image" name="submit">
</form>

</body>
</html>

اطلاعات ارسالی برای پردازش به فایل upload.php ارسال می شوند. فایل upload.php می تواند شامل کدی به صورت زیر باشد:

<?php
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["file1"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
  $check = getimagesize($_FILES["file1"]["tmp_name"]);
  if($check !== false) {
    echo "File is an image - " . $check["mime"] . ".";
    $uploadOk = 1;
  } else {
    echo "File is not an image.";
    $uploadOk = 0;
  }
}

// Check if file already exists
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}

// Check file size
if ($_FILES["file1"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

// Allow certain file formats
if($imageFileType != "jpg" &amp;&amp; $imageFileType != "png" &amp;&amp; $imageFileType != "jpeg"
&amp;&amp; $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG &amp; GIF files are allowed.";
  $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
  echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
  if (move_uploaded_file($_FILES["file1"]["tmp_name"], $target_file)) {
    echo "The file ". basename( $_FILES["file1"]["name"]). " has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";
  }
}
?>

در کد فوق، پس از بررسی وجود فایل عکس واقعی، کنترل حجم فایل و بررسی پسوند عکس، فایل ارسالی با کمک تابع move_uploaded_file در پوشه uploads ذخیره می گردد.

Related posts