انجمن های تخصصی علوم رایانه و هنرهای دیجیتال
  • صفحه اصلی
  • جستجو
  • لیست اعضا
  • تقویم
  • راهنما




سی جی آریا

رسانه تخصصی آموزش هنرهای دیجیتال



ورود به انجمن ثبت نام کنید
ورود
نام کاربری:
گذرواژه‌: گذرواژه‌تان را فراموش کرده‌اید؟
 

Home انجمن های تخصصی علوم رایانه و هنرهای دیجیتال رایانه برنامه نویسی | طراحی وب برنامه نویسی پی اچ پی | PHP مرجع توابع PHP

امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
حالت‌های نمایش موضوع
مرجع توابع PHP
Mohsen Omidvar آفلاین
مدیر ارشد
*******
ارسال‌ها: 1,259

موضوع‌ها: 634
تاریخ عضویت: Apr 2012
اعتبار: 198
سپاس ها 400
سپاس شده 2999 بار در 869 ارسال
#1
01-01-2014، 01:04 PM
در سایتها وظیفه ذخیره اطلاعات بر عهده دیتابیس میباشد.برای ذخیره کاربران ، مطالب سایت ، تعداد بازدید ها و …. از دیبتایس استفاده میکنیم.اما گاهی نیاز داریم تا برای ذخیره تنظیمات یا برای مدیریت عکسهای یک گالری عکس با فایلها سرو کار داشته باشیم.

خوشبختانه پی اچ پی PHP توابع زیادی رو برای مدیریت فایلها ارایه داده که کار رو برای برنامه نویسها راحت کرده
در این سری از آموزشها خواهیم دید چگونه میتونیم فایلها رو مدیریت کنیم.مثل دستکاری محتویات فایلها متنی ، کپی فایلها و پوشه ها ، لیست کردن محتویات پوشه ها و … رو آموزش میبینید.
 *شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
ارسال‌ها
پاسخ
Mohsen Omidvar آفلاین
مدیر ارشد
*******
ارسال‌ها: 1,259

موضوع‌ها: 634
تاریخ عضویت: Apr 2012
اعتبار: 198
سپاس ها 400
سپاس شده 2999 بار در 869 ارسال
#2
01-01-2014، 01:18 PM (آخرین ویرایش: 24-01-2014، 06:04 PM، توسط Mohsen Omidvar.)
در ابتدا باید بگم که دو نوع فایل داریم.یک فایل با فرمت ascci و یک نوع فایل باینری. فایلهایی با قالب متنی از نوع اسکی هستند.مثل .txt , html , asp , .php این نوع فایلها بر پایه متن استوار هستند. اما فایلهای باینری بر پایه داده ها استوارند مثل .jpg , mp3 , .gif در کل در فایلهای باینری با نوع خاصی از ذخیره سازی اطلاعات سرو کار داریم.
برای مدیریت این دو نوع فایل توابع زیادی معرفی شده که در این قسمت از آموزش نحوه دستکاری اطلاعات فایلهای متنی رو خواهیم دید.

تابع : File_get_contents

این تابع برای خواندن محتویات یک فایل به کار میره.

کد php:
$txt = file_get_contents('readme.txt');
تابع File_put_contents 
با استفاده از این تابع هم میتونید داخل یک فایل اطلاعات رو ذخیره کنید

کد php:
file_put_contents($filePath , $data); 
تابع File

این تابع محتویات یک فایل متنی را خوانده و خطوط فایل رو به صورت آرایه بر میگردونه.
کد php:
$fileContent = file('readme.txt'); 
استفاده از توابع با پیشوند F

تعدادی از توابع بسیار کاربردی در PHP با پیشوند f معرفی شدند که برای مدیریت فایلها به کار میرن.

فایلهایی مثل :

fopen
fwrite
fread
fclose
در قسمت اول این آموزش به نحوه خواندن محتویات فایل به وسیله این توابع میپردازیم .

تابع Fopen

ابن تابع آدرس یک فایل را میگیره و یک اشاره گر رو برای استفاده در بقیه توابع برگشت میده.

کد php:
$file = fopen("test.txt","r"); 
از اشاره گر $file میتونیم در توابع دیگه مانند fread استفاده کنیم.پارامتر اول مسیر فایل و پارامتر دوم نحوه دسترسی به فایل رو مشخص میکنه که در این مثال از r به معنای read (باز کردن فایل فقط برای خواندن ) استفاده شده.

تابع Fclose

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

کد php:
fclose($file); 
تابع Fread

محتویات فایل رو به صورت رشته برگشت میده.

کد php:
fread($file,filesize("test.txt")); 
پارامتر اول این تابع اشاره گر ساخته شده به وسیله تابع fopen و پارامتر دوم تعداد بایتهایی که باید از فایل بخونه رو مشخص میکنه.

تابع filesize تعداد بایتهای یک فایل رو برمیگردونه که در مثال به این معنیه که تمام محتویات فایل مورد نظر با استفاده از تابع fread برگشت داده بشه.

تابع Fgets

این تابع یک خط از فایل رو برمیگردونه.

کد php:
echo fgets($file); 
برای خواندن همه خطوط موجود در فایل به شکل زیر عمل میکنیم :

کد php:
<?php

 $file 
= fopen("test.txt","r");

while(! 
feof($file))

 {

 echo 
fgets($file). "<br />";

 }

fclose($file);

 
?>


در هر بار اجرای حلقه با تابع feof چک میکنیم که به انتهای فایل رسیدیم یا خیر.

تابع Fgetc

این تابع یک کاراکتر از فایل رو برمیگردونه


کد php:
echo fgetc($file); 
برای خواندن تمام کاراکترهای یک فایل :

کد php:
<?php
 $file 
= fopen("test2.txt","r");
   while (! 
feof ($file))
   {
   echo 
fgetc($file);
   }
  
 
fclose($file);

 
?>

تابع Fwrite

با این تابع هم میتونید داخل فایل بنویسید.

کد php:
fwrite($file , "1987.ir"); 
دقت کنید که برای استفاده از این تابع باید فایل رو با سطح دسترسی w یا +w باز کنید که اجازه نوشتن داخل فایل رو داشته باشید.

کد php:
<?php
$file 
= fopen("test.txt","w");
echo 
fwrite($file,"Hello World. Testing!");
fclose($file);
?>

خب در این قسمت آموزش با نحوه نوشتن و خواندن محتویات فایلها آشنا شدیم.به امید خدا در قسمت بعد به ادامه آموزش مدیریت فایلها در PHP میپردازیم.
 *شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
ارسال‌ها
پاسخ
Mohsen Omidvar آفلاین
مدیر ارشد
*******
ارسال‌ها: 1,259

موضوع‌ها: 634
تاریخ عضویت: Apr 2012
اعتبار: 198
سپاس ها 400
سپاس شده 2999 بار در 869 ارسال
#3
01-01-2014، 01:38 PM (آخرین ویرایش: 24-01-2014، 06:05 PM، توسط Mohsen Omidvar.)
در قسمت قبل با نحوه خواندن و نوشتن محتویات فایلهای متنی در PHP آشنا شدید.در این این قسمت به مدیریت فایلها و پوشه ها میپردازیم.
مباحثی که در این بخش خواهیم آموخت :
لیست کردن فایلها و پوشه ها
ایجاد پوشه جدید
کپی کردن فایلها و پوشه ها
حذف فایلها
چک کردن وجود یک فایل یا پوشه
برای دسترسی به محتویات یک پوشه چندتا راه وجود داره.در زیر با این راه ها آشنا میشید.
تابع Opendir

این تابع آدرس یک پوشه رو دریافت میکنه و یک اشاره گر رو برگشت میده که از این اشاره گر میتونیم در تابع readdir استفاده کنیم :
کد php:
<?php 
    $location 
= './'; 
    
$dp = opendir($location); 
    while (
$entry = readdir($dp)) 
    {
        if (
is_dir($location . $entry))
        {
            echo 
'[Dir] ' . $entry . '<br />';
        }
        else if (
is_file($location . $entry))
        {
            echo 
'[File] ' . $entry . '<br />';
        } 
    } 
    
closedir($dp); 
?>
در کد بالا ابتدا با استفاده از تابع opendir یک پوشه رو باز کردیم سپس در حلقه while و با استفاده ازتابع readdir محتویات پوشه رو یکی یکی در متغیر $entry ذخیره کردیم.
برای تشخیص اینکه آیا اشاره گر روی یک فایل قرار داره یا یک پوشه از توابع is_file و is_dir استفاده میکنیم.

تابع Dir

خروجی این تابع یک شیء از کلاس Directory میباشد و با استفاده از متدهای این کلاس میتونیم محتویات پوشه رو پیمایش کنیم
کد php:
$location = './'; 
    
$dir = dir($location); 
    while (
$entry = $dir->read()) 
    {
        if (
is_dir($location . $entry))
        {
            echo 
'[Dir] ' . $entry . '<br />';
        }
        else if (
is_file($location . $entry))
        {
            echo 
'[File] ' . $entry . '<br />';
        } 
    } 
کد بالا هم مثل مثال قبل نام فایلها و پوشه هارو چاپ میکنه.

تابع Glob

تابع glob() برای پیدا کردن فایلها با استفاده از یک الگوی خاص میتونه به شما کمک کنه :
کد php:
view sourceprint?
// get all php files
$files = glob('*.php');
print_r($files);
/* output looks like:
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
)
*/ 
شما میتونید چند نوع فایل مختلف رو جستجو کنید
کد php:
$files = glob('*.{php,txt}', GLOB_BRACE);
print_r($files);
/* output looks like:
Array
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
*/ 
و یا یه مسیر بهش بدید :

کد php:
$files = glob('../images/a*.jpg');

print_r($files);
/* output looks like:
Array
(
[0] => ../images/apple.jpg
[1] => ../images/art.jpg
)
*/ 
برای گرفتن مسیر واقعی فایلها هم میتونید ازrealpath() تابع استفاده کنید :
کد php:
$files = glob('../images/a*.jpg');
// applies the function to each array element
$files = array_map('realpath',$files);
print_r($files);
/* output looks like:
Array
(
[0] => C:wampwwwimagesapple.jpg
[1] => C:wampwwwimagesart.jpg
)
*/ 
کپی کردن فایلها

برای کپی کردن فایلها از یک مکان به مکان دیگه از تابع copy استفاده میکنیم :

کد php:
<?php
$file 
= 'example.txt';
$newfile = 'example.txt.bak';
if (!
copy($file, $newfile)) {
    echo 
"failed to copy $file...\n";
}
?>
این تابع دو پارامتر ورودی میگیره.اولی مسیر و نام فایل مبدا و دومی مسیر فایل مقصد.دقت کنید که اگر فایل مقصد وجود داشته باشه فایل overwrite میشه.
اگر هم خطایی در هنگام کپی خطایی رخ بده این تابع مقدار false برمیگردونه.
حذف فایل
برای حذف فایل هم میتونید از تابع unlink استفاده کنید :

کد php:
unlink('test.html'); 

برای چک کردن وجود یک فایل از تابع file_exists استفاده میشه.
کد php:
if(file_exists('test.jpg')) {
 
// ...
} 
در ادامه یه کلاس ساده ساختم برای لیست کردن محتویات یک پوشه.

کد php:
<?php
class FileManager
{
    private 
$path;
    function 
__construct($path = '')
    {
        
$this->path = $path;
    }
    function 
getDirectories()
    {
            
$dirContent = array();
        
$dir = opendir($this->path);
        while(
$contnets = readdir($dir))
        {
            if(
is_dir($this->path . $contnets) AND $contnets!='.' AND $contnets != '..')
            {
                
$dirContent['dir'][] = $contnets;           
            }elseif (
is_file($this->path . $contnets))
            {
                
$dirContent['file'][] = $contnets;
            }
        }
        return 
$dirContent;
    }
    function 
render()
    {
                
$dirContent = $this->getDirectories();
                echo 
'<h1>'.$this->path.'</h1>';
                echo 
'<a href="?dir=./">Root Directory.</a><br>';
                
$parent = explode('/',$this->path);
                
array_pop($parent);
                
array_pop($parent);
                
$parent = implode('/',$parent);              
                echo 
'<a href="?dir='.$parent.'/">Parent Directory.</a><br>';
                echo 
'Root ..
                <br>          
                <ul>    
                '
;
                foreach(
$dirContent as $key=>$value)
                {
                    if(
$key=='dir')
                    {
                       foreach(
$value as $v)
                       {
                           echo 
'<li><a href="?dir='.$this->path.$v.'/">'.$v.'</a></li><br>';
                       }
                    }
                    else
                    {
                        echo 
'<ul>';
                       foreach(
$value as $v)
                       {
                           echo 
'<li><a href="'.$this->path . $v.'">'.$v.'</a></li><br>';
                       } 
                       echo 
'</ul>';
                    }
                }
                echo 
'<ul>';
    }
} 
برای استفاده از کلاس بالا به صورت زیر عمل میکنیم :
کد php:
view sourceprint?
<?
php
include 'FileManager.php';
$path = '/files/';
if(isset(
$_GET['dir']))
{
    
$path = $_GET['dir'];
    
$fileManager = new FileManager($_GET['dir']);
}else
    
$fileManager = new FileManager('./files/'); 
$fileManager->render();
?>
با استفاده از این کلاس میتونید لیست محتویات هر پوشه رو با کلیک روی پوشه مشاهده کنید.
 *شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
ارسال‌ها
پاسخ
Mohsen Omidvar آفلاین
مدیر ارشد
*******
ارسال‌ها: 1,259

موضوع‌ها: 634
تاریخ عضویت: Apr 2012
اعتبار: 198
سپاس ها 400
سپاس شده 2999 بار در 869 ارسال
#4
01-01-2014، 02:13 PM (آخرین ویرایش: 24-01-2014، 06:06 PM، توسط Mohsen Omidvar.)
در ادامه میتونید آموزش کار با پروتکل FTP در PHP رو مشاهده کنید.

FTP چیست؟

FTP یا File Transfer Protocol یک پروتکل انتقال فایل بر پایه TCP/IP می باشد.از این پروتکل برای انتقال فایل ها بین هاست استفاده میشود.در این قسمت با هم یک کلاس کار با اف تی پیFTP خواهیم ساخت.

قبل از اینکه شروع به ساخت کلاس کار با FTP کنیم نگاه کلی به کار این کلاس می اندازیم :

اتصال به سرور

ساخت پوشه روی سرور

آپلود فایل

تغییر مسیر

لیست کردن اطلاعات یک پوشه خاص

دانلود فایل

چه زمانی باید از FTP استفاده کنیم ؟

استفاده از FTP کاربردهای زیادی دارد. اما شاید بیشترین کاربردهای این پروتکل موارد زیر باشد :

ساخت یک گالری تصاویر برای سایت و آپلود عکسها توسط کاربر

پشتیبان گیری از اطلاعات و محتویات سایت و دیتابیس

مرحله اول : آماده کردن مقدمات

در این مرحله ما دو فایل با نامهای index.php و ftp_class.php خواهیم ساخت.

فایل Index.php صفحه اصلی ماست.جایی که از کلاس یک شیء ایجاد کرده و متدهای مورد نظر را فراخوانی میکنیم.

فایل ftp_class.php فایلی است که کلاس کار با FTP را در آن خواهیم نوشت.

مرحله دوم : ساخت کلاس

یکی از مزیتهای برنامه نویسی شیء گرا این است که میتوان از کدهای نوشته شده در آینده نیز استفاده کرد.برای همین در این آموزش از برنامه نویسی شیء گرا کمک خواهیم گرفت.

حالا فایل ftp_class.php را باز کرده و کدهای زیر را داخل فایل مینویسیم.

کد php:
class FTPClient
     
{
           
// *** Class variables
           
public function __construct() { }
     } 
نام کلاس ما FTPClient است.کدهای بالا برای کسانی که با برنامه نویسی شیء گرا آشنا هستند نیاز به توضیح ندارد.

با استفاده از کلمه کلیدی class یک کلاس ایجاد کردیم.داخل این کلاس یک تابع (متد) قرار دارد با نام __construct. این متد ، متد سازنده نام دارد.هنگامی که از کلاس FTPClient یک شیء ایجاد می کنیم این تابع به صورت خودکار اجرا میشود.

نکته : نام متد construct با دو زیرخط (underline) شروع میشود.

مرحله سوم : متغیرهای کلاس

در این مرحله متغیرهای مورد نیاز کلاس را ایجاد میکنیم.
کد php:
private $connectionId;
private 
$loginOk = false;
private 
$messageArray = array(); 
پیشوند private به این معنی است که این متغیرها فقط در خود این کلاس قابل دسترسی هستند و در خارج از کلاس نمی توان به آنها دسترسی داشت.
$connectionId متغیری است که رشته اتصال را نگهداری میکند.
$loginOk هنگامی که اتصال ما به سرور موفقیت آمیز بود true میشود.
$messageArray آرایه ای که پیغام ها را نگهداری میکند.
مرحله چهارم : ذخیره سازی پیغام ها
در داخل هر متد ما متد logMessage را فراخوانی میکنیم.این متد وظیفه ذخیره پیغام های ایجاد شده به وسیله کلاس مارا دارد.بنابراین کاربر میتواند از روند اجرای کار در جریان قرار گیرد.
کدهای زیر را به کلاس FTPClient اضافه کنید :

private function logMessage($message)
{
$this->messageArray[] = $message;
}

به دلیل اینکه متغیر $messageArray یکی از اعضای کلاس است با استفاده از کلمه کلیدی $this-> به آن دسترسی پیدا میکنیم.

برای برگشت دادن اطلاعات از متد زیر استفاده میکنیم.

کدهای زیر را نیز به کلاس اضافه کنید :
کد php:
public function getMessages()
     {
          return 
$this->messageArray;
     } 
همینطور که میبینید این متد یک متد public یا عمومی میباشد.کلمه کلیدی public مانند کلمه private نوع دسترسی به اجزاء کلاس را مشخص می کند. اجزائی که با کلمه کلیدی public مشخص می شوند در بیرون از کلاس نیز میتوان به آنها دسترسی داشت.

مرحله پنجم : اتصال به سرور

در این مرحله متد connect را در کلاس خواهیم نوشت. این متد برای اتصال به سرور به کار می آید :
کد php:
public function connect ($server, $ftpUser, $ftpPassword, $isPassive = false)
{
      
// *** Set up basic connection
      
$this->connectionId = ftp_connect($server);
      
// *** Login with username and password
      
$loginResult = ftp_login($this->connectionId, $ftpUser, $ftpPassword);
      
// *** Sets passive mode on/off (default off)
      
ftp_pasv($this->connectionId, $isPassive);
      
// *** Check connection
      
if ((!$this->connectionId) || (!$loginResult)) {
            
$this->logMessage('FTP connection has failed!');
            
$this->logMessage('Attempted to connect to ' . $server . ' for user ' . $ftpUser, true);
            return 
false;
      } else {
            
$this->logMessage('Connected to ' . $server . ', for user ' . $ftpUser);
            
$this->loginOk = true;
            return 
true;
      }
} 
ما اطلاعات مربوط به اتصال به سرور را به این متد ارسال کردیم.برای اتصال به سرور نام کاربری ($ftpUser) ، رمز عبور ($ftpPassword) و نام سرور ($server) نیاز خواهیم داشت.

اولین دستور یک اتصال FTP را ایجاد میکند.اطلاعات این اتصال را درمتغیر $connectionId ذخیره میکنیم.

دستور ftp_login برای ورود به سرور استفاده میشود.پارامتر اول اطلاعات سرورمورد نظر($connectionId) ، پارامتر دوم نام کاربری و پارامتر سوم این تابع رمز عبور برای ورود به سرور می باشد.

Passive Ftp یک نوع امن تر انتقال اطلاعات در پروتکل FTP است.به هر حال با استفاده از دستور ftp_pasv میتوانید این قابلیت را فعال یا غیر فعال کنید.

سپس در دستور if از صحت اتصال به سرور با خبر میشویم.در هر صورت با استفاده از تابع logMessage نتیجه این اتصال را ذخیره میکنیم.

مرحله ششم : آزمایش اتصال

تا این مرحله از کار ما کلاسی نوشتیم که یک تابع برای اتصال به سرور دارد.برای آزمایش از عملکرد این کلاس کدهای زیر را به فایل index.php اضافه کنید.

کد php:
// *** Define your host, username, and password
define('FTP_HOST', '192.168.1.88');
define('FTP_USER', 'Blimpf');
define('FTP_PASS', 'catfish');
// *** Include the class
include('ftp_class.php');
// *** Create the FTP object
$ftpObj = new FTPClient();
// *** Connect
$ftpObj -> connect(FTP_HOST, FTP_USER, FTP_PASS); 
همینطور که در کدهای بالا میبینید ابتدا جزئیات مربوط به اتصال را اضافه کردیم.این تنظیمات همچنین میتوانند در فایلی جداگانه قرار گیرند.
سپس با استفاده از دستور include فایل ftp_class.php را به صفحه index.php وارد کردیم تا بتوانیم از کلاس FTPClient در فایل index.php استفاده کنیم.

در خط بعد با استفاده از کلمه کلیدی new یک شیء از کلاس FTPClient ساختیم و در متغیر $ftpObj قرار دادیم.

در انتها متد( تابع ) connect را از کلاس FTPClient فراخوانی کرده و نام سرور ، نام کاربری و رمزعبور را به این تابع ارسال کردیم.

مرحله ششم بخش دوم : مشاهده خروجی

در این مرحله کدهای قسمت قبل را کمی تغییر میدهیم.

کد php:
// *** Connect
if ($ftpObj -> connect(FTP_HOST, FTP_USER, FTP_PASS)) {
      
// *** Then add FTP php here
      
echo 'connected';
} else {
      echo 
'Failed to connect';
} 
کدهای مرحله قبل را میتوانیم به وسیله یک شرط if چک کنیم.

در کلاس FTPClient دو تابع برای مدیریت پیغام ها ایجاد کردیم.در صورتی که اتصال با سرور با موفقیت انجام نشد میتوانیم از دستور زیر برای نمایش پیغام مورد نظر استفاده کنیم.
کد php:
// *** Connect
if ($ftpObj -> connect(FTP_HOST, FTP_USER, FTP_PASS)) {
      
// *** Then add FTP php here
      
echo 'connected';
} else {
      
print_r($ftpObj -> getMessages()); 
} 
مرحله هفتم : ساخت پوشه (Directory)

خیلی خب، الان زمانش رسیده است که توابع کاربردی را اضافه کنیم.اولین متدی که اضافه خواهیم کرد متد makeDir میباشد. این متد یک پوشه روی سرور میسازد. این متد یک پارامتر میگیرد که مسیر و نام پوشه مورد نظر است.قسمت مهم این متد ، تابع ftp_mkdir میباشد که دو پارامتر میگیرد.پارمتر اول رشته اتصال و پارامتر دوم مسیر و نام پوشه است.

کدهای زیر را به فایل ftp_class.php اضافه کنید:

کد php:
public function makeDir($directory)
{
      
// *** If creating a directory is successful...
      
if (ftp_mkdir($this->connectionId, $directory))
      {
                      
$this->logMessage('Directory "' . $directory . '" created  successfully');
            return 
true;
      } else {
            
// *** ...Else, FAIL.
            
$this->logMessage('Failed creating directory "' . $directory . '"');
            return 
false;
      }
} 
حالا برای ساخت یک پوشه جدید به صورت زیر از این متد در فایل index.php استفاده میکنیم :
کد php:
$dir = 'photos';  
 
// *** Make directory  
$ftpObj->makeDir($dir); 
مرحله هشتم : آپلود فایل

ادامه این بحث رو با اضافه کردن تابعی برای آپلود فایل روی سرور دنبال میکنیم.
زمانی که بخواهیم یک فایل را روی سرور آپلود کنیم نیاز داریم تا نوع فایل را تشخیص دهیم( باینری یا اسکی). به طور ساده درصورتی که یک فایل متنی را آپلود کنیم این فایل از نوع ascci و در بقیه موارد نوع فایل Binary خواهد بود.
برای فایلهای ascii یک آرایه می سازیم و پسوند فایلهای متنی را داخل این آرایه ذخیره میکنیم.

کد php:
$asciiArray = array(‘txt’,’csv’); 
سپس بعد از مشخص شدن نوع فایل ، تصمیم می گیریم که فایل در کجا ذخیره شود.
برای فهمیدن پسوند فایل از تابع explode استفاده میکنیم :

کد php:
$extension = end(explode(‘.’ , $file)); 
در کد بالا ابتدا با تابع explode نام فایل را به آرایه تبدیل کردیم.سپس با دستور end آخرین عضو آرایه را برگرداندیم.
متد زیر را به کلاس FTPClient اضافه کنید :
کد php:
public function uploadFile ($fileFrom, $fileTo)
{
      
// *** Set the transfer mode
      
$asciiArray = array('txt', 'csv');
      
$extension = end(explode('.', $fileFrom));
      if (
in_array($extension, $asciiArray)) {
            
$mode = FTP_ASCII;
      } else {
            
$mode = FTP_BINARY;
      }
      
// *** Upload the file
      
$upload = ftp_put($this->connectionId, $fileTo, $fileFrom, $mode);
      
// *** Check upload status
      
if (!$upload) {
                  
$this->logMessage('FTP upload has failed!');
                  return 
false;
            } else {
                  
$this->logMessage('Uploaded "' . $fileFrom . '" as "' . $fileTo);
                  return 
true;
            }
} 
پس از ذخیره کردن پسوند فایل در متغیر $extension با استفاده از دستور in_array چک کردیم که آیا پسوند فایل یکی از دو پسوند موجود در آرایه $ascciArray میباشد یا خیر. در صورتی که این شرط برقرار باشد ثابت FTP_ASSCI در متغیر $mode قرار میگیرد در غیر اینصورت ثابت FTP_BINARY در این متغیر قرار خواهد گرفت.

سپس با دستور ftp_put اقدام به انتقال فایل به سرور کردیم.اگر انتقال با موفقیت انجام نشود تابع uploadFile مقدار false را بر میگرداند.

برای استفاده از این متد در فایل index.php به صورت زیر عمل میکنیم :
کد php:
$fileFrom = 'zoe.jpg';
$fileTo = $dir . '/' . $fileFrom;
// *** Upload local file to new directory on server
$ftpObj -> uploadFile($fileFrom, $fileTo); 
مرحله نهم : تغییر مسیر

برای حرکت بین پوشه های ساخته شده متد زیر را به کلاس FTPClient اضافه میکنیم :

کد php:
public function changeDir($directory)
{
    if (
ftp_chdir($this->connectionId, $directory))
    {
        
$this->logMessage('Current directory is now:'.ftp_pwd($this->connectionId));
        return 
true;
      } else {
            
$this->logMessage('Couldn\'t change directory');
            return 
false;
      }
} 
در متد changeDir تنها تابعی که نیاز به توضیح دارد تابع ftp_chdir است.همینطور که متوجه شدید این تابع وظیفه تغییر مسیر را بر عهده دارد.

مرحله دهم : لیست فایلها

حال برای نمایش لیست فایلهای موجود روی سرور متد getDirListing را به کلاس FTPClient اضافه میکنیم.این متد لیست فایلها و پوشه های سرور را به صورت یک آرایه بر میگرداند :
کد php:
public function getDirListing($directory = '.', $parameters = '-la')
{
       
// get contents of the current directory
       
$contentsArray = ftp_nlist($this->connectionId, $parameters.'  '.$directory);
       return 
$contentsArray;
} 
$directory : نام پوشه ایست که میخواهید لیست فایلهای آنرا ببینید.

$parameter : این پارامتر به صورت پیش فرض ‘-la’ را در خودش جای داده. ‘-la’ یک دستور لینوکس برای نمایش اطلاعات بیشتری در مورد دایرکتوری مورد نظر میدهد.

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

کد php:
view sourceprint?
1
echo ‘<pre>’;
2
print_r
($ftpObj->getDirListing());
3
echo ‘</pre>’; 
 *شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
ارسال‌ها
پاسخ
Mohsen Omidvar آفلاین
مدیر ارشد
*******
ارسال‌ها: 1,259

موضوع‌ها: 634
تاریخ عضویت: Apr 2012
اعتبار: 198
سپاس ها 400
سپاس شده 2999 بار در 869 ارسال
#5
01-01-2014، 03:03 PM (آخرین ویرایش: 24-01-2014، 06:08 PM، توسط Mohsen Omidvar.)
در این بخش در مورد توابع کار با آرایه ها حرف میزنیم.سعی میکنم مختصر و مفید در مورد همه توابعی که مربوط به آرایه ها هستن توضیح بدم.

Array_change_key_case(Array,Case)

این تابع تمام کلید های داخل آرایه رو به حروف بزرگ یا کوچک تبدیل میکنه.
پارامتر اول این تابع یک ارایه میگیره و پارامتر دوم CASE_LOWER برای تبدیل به حروف کوچک و CASE_UPPER برای تبدیل کلیدها به حروف کوچک استفاده میشن.
مثال :

کد php:
$input_array = array("FirSt" => 1, "SecOnd" => 4);
print_r(array_change_key_case($input_array, CASE_UPPER)); 

خروجی

Array
(
[FIRST] => 1
[SECOND] => 4
)

مثال ۲ :
کد php:
$arr = array('first'=>'Apple','Second'=>'orange');
print_r(array_change_key_case($arr, CASE_UPPER));); 
خروجی
Array
(
[FIRST] => Apple
[SECOND] => orange
)
در مثال دوم مشاهده میکنید که فقط کلیدهای آرایه به حروف بزرگ تبدیل شدند.

کد php:
Array Array_combine ( Array , Array ) 

این تابع دو آرایه رو به یک آرایه تبدیل مبکنه.به این صورت که آرایه ای که در پارامتر اول بهش میدیم به عنوان کلید و آرایه پارامتر دوم به عنوان مقادیر آرایه جدید در نظر گرفته میشن.
مثال :
کد php:
$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);
print_r($c); 
خروجی :
Array
(
[green] => avocado
[red] => apple
[yellow] => banana
)
میبینید که تمام مقادیر آرایه اول به عنوان کلید و تمام مقادیر آرایه دوم به عنوان مقدار آرایه جدید در نظر گرفته شدن. در صورتی که تعداد عناصر آرایه اول با آرایه دوم برابر نباشه FALSE برگشت داده میشه.

Array Array_count_values ( Array )

تعداد تکرار کلیدهای یک آرایه رو به صورت یک آرایه انجمنی برمیگردونه.
مثال :

کد php:
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array)); 
خروجی

Array
(
[1] => 2
[hello] => 2
[world] => 1
)

در آرایه $array عدد ۱ دوبار تکرار شده ، hello هم دوبار تکرار شده و world یک بار تکرار شده.خروجی این تابع هم به همین صورت تعداد مقادیر تکرار شده در آرایه رو برمیگردونه.

Array_diff(Array1,Array2,Array3,…)

با استفاده از این تابع میتونید یک ارایه رو با چند آرایه دیگه مقایسه کنید.در این تابع مقادیر(values) آرایه اول با مقادیر آرایه های بعدی مقابسه میشه و value هایی که در آرایه اول باشه اما در آرایه های بعدی نباشه برگشت داده میشه.

کد php:
$a1=array(0=>"Cat",1=>"Dog",2=>"Horse");
$a2=array(3=>"Horse",4=>"Dog",5=>"Fish");
print_r(array_diff($a1,$a2)); 
خروجی

Array ( [0] => Cat )

Array_diff_assoc($Array1,$Array2,$Array3,…)

مقایسه کلیدها و مقادیر دو یا چند آرایه.کلیدها و مقادیر آرایه اول با بقیه آرایه ها مقایسه میشن و در صورتی که در یک کلید و مقدار در آرایه اول بود اما در بقیه ارایه ها نبود برگشت داده میشه.
کد php:
$a1=array(0=>"Cat",1=>"Dog",2=>"Horse");
$a2=array(0=>"Rat",1=>"Horse",2=>"Dog");
$a3=array(0=>"Horse",1=>"Dog",2=>"Cat");
print_r(array_diff_assoc($a1,$a2,$a3)); 
خروجی
Array ( [0] => Cat [2] => Horse )

Array_diff_key(Array1 , Array2,…)

مقادیر و کلیدهای یک یا چند آرایه رو با بقیه آرایه ها مقایسه میکنه و درصورتی که کلیدی در آرایه اول بود اما در بقیه ارایه ها نبود برگشت داده میشه.

1
$a1=array(0=>"Cat",1=>"Dog",2=>"Horse");
2
$a2=array(2=>"Bird",3=>"Rat",4=>"Fish");
3
$a3=array(5=>"Horse",6=>"Dog",7=>"Bird");
4
print_r(array_diff_key($a1,$a2,$a3));

خروجی
Array ( [0] => Cat [1] => Dog )

Array_fill(Start , Number , Value)

تابعی برای پر کردن یک آرایه. پارامتر اول عدد شروع کلید آرایه.پارامتر دوم تعداد عناصری که باید به آرایه اضافه بشه و پارمتر سوم مقداری که باید به آرایه داده بشه.
کد php:
$a=array_fill(2,3,"Dog");
print_r($a); 
خروجی

Array ( [2] => Dog [3] => Dog [4] => Dog )

کلید ارایه از ۲ شروع شده و ۳ عنصر به آرایه اضافه شده با مقدار “Dog”

Array_flip()


این تابع جای کلیدها و مقادیر رو عوض میکنه.

کد php:
$a=array(0=>"Dog",1=>"Cat",2=>"Horse");
print_r(array_flip($a)); 
خروجی
Array ( [Dog] => 0
[Cat] => 1 [Horse] => 2 )

Array_key_exists(Key , Array)

این تابع چک میکنه که آیا یک کلید خاص در آرایه وجود داره یا نه .پارامتر اول کلید رو میگیره و پارامتر دوم آرایه
کد php:
$a=array("a"=>"Dog","b"=>"Cat");
 if (
array_key_exists("a",$a))
 {
 echo 
"Key exists!";
 }
 else
 {
 echo 
"Key does not exist!";
 }
//Key exists! 

Array_keys(Array)

تمام کلیدهای آرایه رو به صورت یک آرایه بر میگردونه.

کد php:
$ar = array('a'=>'Dog','b'=>'cat','c'=>'horse');
 
print_r(array_keys($ar)); 

Array_map(Function , Array1 , Array2 , …)

این تابع هر مقدار از آرایه رو به یک تابع ارسال میکنه و نتیجه تابع رو به صورت یک آرایه بر میگردونه.
مثال :
کد php:
function sqr($v)
 {
 return 
$v * $v;
 }
 
$ar = array(2 , 3 , 4 , 5 , 6 );
 
print_r(array_map('foo' , $ar)); 
خروجی :

Array ( [0] => 4 [1] => 9 [2] => 16 [3] => 25 [4] => 36 )

در صورتی که نیاز به فراخوانی متد یک کلاس در تابع array_map باشیم پارامتر اول رو به صورت یک آرایه تعریف میکنیم که مقدار اول آرایه نام کلاس ومقدار دوم نام تابع مورد نظر است :

کد php:
class foo{
function 
bar($a){ return $a * $a );
}
array_map(array('foo','bar') , $arr)); 

Array_merg(Array1 , Array2 , …)

ادغام دو یا چند آرایه باهم.

$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge($a1,$a2));

خروجی :

Array ( [a] => Horse => Cat => Cow )

اگر کلید همنام در آرایه ها وجود داشته باشه کلید و مقدار آخرین آرایه در آرایه جدید قرار میگیره .

[b]Array_pop(Array)


آخرین عنصر آرایه رو حذف میکنه .
کد php:
$a=array("Dog","Cat","Horse");
array_pop($a);
print_r($a);
Array ( [
0] => Dog [1] => Cat )
Array_product(Array) 
حاصلضرب تمام مقادیر آرایه رو حساب میکنه و بر میگردونه .
کد php:
$a=array(5,5);
echo(
array_product($a));// 25 

Array_push(Array , Value1,Value2,…)

یک یا چند مقدار جدید رو به انتهای آرایه اضافه میکنه.


$a=array("Dog","Cat");
array_push($a,"Horse","Bird");
print_r($a);
خروجی

Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird )

Array_rand(Array ,Number)

به صورت تصادفی یک کلید از آرایه رو بر میگردونه.در قسمت number اگر عددی قرار داشته باشه به همون تعداد کلید های تصادفی از آرایه برگشت داده میشه .
کد php:
$a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
print_r(array_rand($a,2)); 
خروجی
Array ( [0] => c [1] => b )

Array_reduce(Array , Function , Initial)

این تابع مقادیر یک آرایه رو به یک تابع از قبل تعریف شده ارسال میکنه و نتیجه رو به صورت string (رشته) برمیگردونه.
initial یک مقدار جدا برای ارسال به آرایه است.
کد php:
function myfunction($v1,$v2)
{
return 
$v1 . "-" . $v2;
}
$a=array("Dog","Cat","Horse");
print_r(array_reduce($a,"myfunction"));//-Dog-Cat-Horse 

Array_revers(Array , Preserve)


برای عکس کردن یک آرایه از این تابع استفاده میشه
خروجی
Array (

=> Horse => Cat [a] => Dog )

[b]Array_search(Value , Array , Restrict)


جستجو در بین مقادیر آرایه و برگشت دادن کلید .

strict : اگر true باشه بین '۵' و ۵ فرق قائل میشه.به صورت پیش فرض false
کد php:
$a=array("a"=>"5","b"=>5,"c"=>"5");

echo 
array_search(5,$a,true); // b 
Array_shift(Array)

عنصر اول از آرایه رو حذف و برگشت میده .
کد php:
$a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
echo 
array_shift($a);
print_r ($a); 
Array_slice(Array, Start , Length)

قسمتی از آرایه رو برمیگردونه .

کد php:
$a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
print_r(array_slice($a,1,2)); 
خروجی
Array ( [0] => Cat [1] => Horse )

Array_splice(Array, Start, Length, Array)

قسمتهایی از آرایه رو حذف میکنه و با عناصر جدید جایگزین میکنه.و یک آرایه جدید برمیگردونه.
کد php:
$a1=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");
$a2=array(0=>"Tiger",1=>"Lion");
array_splice($a1,0,2,$a2);
print_r($a1); 
خروجی
Array ( [0] => Tiger [1] => Lion [2] => Horse [3] => Bird )

Array_sum(Array)

جمع تمام مقادیر آرایه رو بر میگردونه.

کد php:
$a=array(0=>"5",1=>"15",2=>"25");
echo 
array_sum($a);
// 45 
Array_unique(Array)

مقادیر (values) مشابه رو از آرایه حذف میکنه.در صورتی که مقادیر مشابه وجود داشته باشن اولین مقدار نگه داشته میشه و بقیه مقادیر مشابه حذف میشن.

کد php:
$a=array("a"=>"Cat","b"=>"Dog","c"=>"Cat");
print_r(array_unique($a)); 
خروجی
Array ( [a] => Cat => Dog )

[b]Array_values(Array)


تمام مقادیر(values) یک آرایه رو به صورت یک آرایه جدید برمیگردونه.

کد php:
$a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse");
print_r(array_values($a)); 
خروجی
Array ( [0] => Cat [1] => Dog [2] => Horse )

Array_walk(Array,Function ,Parameter…)

تمام مقادیر آرایه رو به یک تابع از پیش تعریف شده ارسال میکنه.(مانند تابع array_map) .پارامترهای ورودی تابع تعریف شده کلیدها و مقادیر آرایه هستند.
کد php:
function myfunction($value,$key)
{
    echo 
"The key $key has the value $value";
}
$a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse");
array_walk($a,"myfunction"); 
خروجی

The key a has the value Cat
The key b has the value Dog
The key c has the value Horse

Count(Array)

تعداد عناصر آرایه رو بر میگردونه.

کد php:
$people = array("Peter", "Joe", "Glenn", "Cleveland");
$result = count($people);
echo 
$result;
// 4 
Current(Array)

مقدار فعلی یک آرایه رو بر میگردونه.
کد php:
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo 
current($people) . "
"
;
// Peter 
end(array)

آخرین مقدار آرایه رو بر میگردونه.
کد php:
<pre class="brush: php; gutter: true">
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo 
current($people)."  ";
echo 
end($people); 
خروجی
Peter
Cleveland

Extract(Array, Extract_rules,Prefix)
این تابع یک آرایه انجمنی رو به عنوان اولین پارامتر میگیره و کلیدهای آرایه رو به متغیر تبدیل میکنه. کلیدهای آرایه نام متغیر و مقادیر کلیدها به مقدار متغیر تبدیل میشن.

کد php:
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo 
"$a = $a; $b = $b; $c = $c"; 
extract_rules :
- EXTR_OVERWRITE : اگر متغیر از قبل وجود داشته باشه از بین میره و مقدار جدید داخلش قرار میگیره
- EXTR_SKIP : اگر متغیراز قبل وجود داشته باشه جایگزین نمیشه
- EXTR_PREFIX_SAME : درصورت همنام بودن یک پیشوند به متغیر اضافه میشه.
- EXTR_PREFIX_ALL : به همه متغیرها یک پیشوند اختصاص داده میشه
- EXTR_PREFIX_INVALID : فقط به کلیدهایی که نام مجاز برای متغیر شدن ندارن یا کلیدهای عددی یک پیشوند اضافه میشه.
- EXTR_IF_EXISTS : فقط اگر متغیر وجود داشته باشه جایگزین میشه
- EXTR_PREFIX_IF_EXISTS : در صورتی که متغیر از قبل موجود باشه یک پیشوند به متغیر جدید اضافه میشه.
- EXTR_REFS : متغیرها رو به صورت reference میسازه

prefix : اگر EXTR_PREFIX_SAME, EXTR_PREFIX_ALL, EXTR_PREFIX_INVALID EXTR_PREFIX_IF_EXISTS استفاده بشه پیشوندی که در این قسمت مشخص میشه به متغیر ها داده میشه.
کد php:
$a = 'Original';
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array, EXTR_PREFIX_SAME, 'dup');
echo 
"$a = $a; $b = $b; $c = $c; $dup_a = $dup_a;";
// $a = Original; $b = Dog; $c = Horse; $dup_a = Cat; 
In_array(Search ,Array,Type)
چک میکنه که آبا مقدار “search” در آرایه وجود داره یا نه.اگر type برابر با true باشه نوع داده هم چک میشه.

کد php:
$people = array("Peter", "Joe", "Glenn", "Cleveland", 23);
if (
in_array("23",$people, TRUE))
{
    echo 
"Match found";
}
else
{
    echo 
"Match not found";
}
if (
in_array("Glenn",$people, TRUE))
{
    echo 
"Match found";
}
else
{
    echo 
"Match not found";
}
if (
in_array(23,$people, TRUE))
{
    echo 
"Match found";
}
else
{
    echo 
"Match not found";
}
<
pre class="brush: php; gutter: true">
<
blockquote>Match not found Match found Match found</blockquote> 
next(array)
تابع next اشاره گر رو به عنصر بعدی آرایه حرکت میده و مقدار عنصر بعدی رو به خروجی میفرسته.
کد php:
<pre class="brush: php; gutter: true">
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo 
current($people) . " ";
echo 
next($people); 
خروجی
Peter
Joe

Prev(Array)

اشاره گر رو به عنصر قبلی آرایه جرکت میده و به خروجی میفرسته
کد php:
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo 
current($people) . " ";
echo 
next($people) . " ";
echo 
prev($people); 
خروجی
Peter
Joe
Peter

Range(Low,High,Step)

تابع range یک آرایه میسازه با بازه ای از داده ها.
low : کمترین مقدار
high : بیشترین مقدار
step : مقدار زیاد شدن از کم به زیاد رو مشخص میکنه.

کد php:
$number = range(0,5);
print_r ($number); 
خروجی
Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
[4] => 4
[5] => 5
)

Reset(Array)

انتقال اشاره گر به اولین عنصر آرایه.
کد php:
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo 
current($people) . " ";
echo 
next($people) . " ";
echo 
reset($people); 
خروجی

Peter
Joe
Peter

Shuffle(Array)

نحوه قرار گیری عناصر داخل آرایه رو به صورت تصادفی تغییر میده و کلیدهای جدیدی به عناصر آرایه نسبت میده.
کد php:
$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
shuffle($my_array);
print_r($my_array); 
خروجی
Array ( [0] => Cat [1] => Horse [2] => Dog )

Sizeof(Array, Mode)

تعداد عناصر ارایه رو بر میگردونه.mode اگر ۱ تنظیم بشه آرایه های چند بعدی هم تشخیص داده میشه.

کد php:
$people = array("Peter", "Joe", "Glenn", "Cleveland");
$result = sizeof($people);
echo 
$result;// 4 
 *شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
ارسال‌ها
پاسخ
Mohsen Omidvar آفلاین
مدیر ارشد
*******
ارسال‌ها: 1,259

موضوع‌ها: 634
تاریخ عضویت: Apr 2012
اعتبار: 198
سپاس ها 400
سپاس شده 2999 بار در 869 ارسال
#6
01-01-2014، 04:02 PM (آخرین ویرایش: 24-01-2014، 06:10 PM، توسط Mohsen Omidvar.)
بعد از مدتها کار با php ممکنه هنوز توابعی باشن که باهاشون برخورد نکردیم و نمیدونیم چنین توابعی هم وجود دارن که میتونن کار
مارو راحتتر کنن.در زیر اشاره ای میکنم به برخی از توابع مفیدی که ممکنه خیلی ها هنوز بهش بر نخورده باشن.
توابعی با تعداد آرگومانهای دلخواه
ممکنه قبلا شما توابعی نوشته باشین که به تعداد دلخوله میتنین آرگومان بهش پاس بدین اما تابعی توی php وجود داره که به شما
اجازه میده توابعی بسازید که تعداد آرگومانها به صورت واقعی دلخواه هستند.
در ابتدا یک مثال از تابعی میزم که میتونه تعداد آرگومانهای دلخواه رو بهش پاس بدید

کد php:
// function with 2 optional arguments
function foo($arg1 = '', $arg2 = '') {
echo 
"arg1: $arg1n";
echo 
"arg2: $arg2n";
}
foo('hello','world');
/* prints:
arg1: hello
arg2: world
*/
foo();
/* prints:

arg1:

arg2:
*/ 
در این تابع شما میتونید یک ، دو آرگومان رو ببه تابع پاس بدید.حتی میتونید هیچ آرگومانی رو به تابع نفرستید که هیچ اشکالی نداره اما بیشتر از ۲ تا آرگومان رو اگر به تابع پاس بدیم داخل تابع نمیتونیم از آرگومان سوم استفاده کنیم.میبینیم که این روش هم محدودیتهای خودش رو داره.
اما حالا از تابع func_get_args()استفاده میکنیم :
کد php:
view sourceprint?
// yes, the argument list can be empty
function foo() {
// returns an array of all passed arguments
$args = func_get_args();
foreach (
$args as $k => $v) {
echo 
"arg".($k+1).": $vn";
}
}
foo();
/* prints nothing */
foo('hello');
/* prints
arg1: hello
*/
foo('hello', 'world', 'again');
/* prints
arg1: hello
arg2: world
arg3: again
*/ 
حالا شما با تابع func_get_args() به تعداد دلخواه میتونید به توابعتون آرگومان بفرستید و توی تابع ازش استفاده کنید.

مقدار حافظه استفاده شده :
وقتی شما بدونید که برنامه ای که نوشتید چقدر از فضای حافظه رو اشغال میکنه بهتر میتونید برنامه خودتون رو بهینه کنید.
پی اچ پی یک مدیریت حافظه و GC قوی داره.مقدار فضایی که اسکریپت شما در حافظه اشغال میکنه میتونه روی سرعت اجرای برنامه

تاثیر گذار باشه.ما میتونیم از تابع memory_get_usage() برای مقدار حافشه مصرفی و از تابع memory_get_peak_usage() برای اطلاع

از بیشترین حافظه مصرفی در اسکریت استفاده کنیم.

کد php:
echo "Initial: ".memory_get_usage()." bytes n";
/* prints
Initial: 361400 bytes
*/
// let's use up some memory
for ($i = 0; $i < 100000; $i++) {
$array []= md5($i);
}
// let's remove half of the array
for ($i = 0; $i < 100000; $i++) {
unset(
$array[$i]);
}
echo 
"Final: ".memory_get_usage()." bytes n";
/* prints
Final: 885912 bytes
*/
echo "Peak: ".memory_get_peak_usage()." bytes n";
/* prints
Peak: 13687072 bytes
*/ 
مقدار استفاده از CPU
برای اینکار از تابع getrusage() استفاده میکنیم.اسن تابع روی سرور های ویندوز جواب نمیده.

کد php:
print_r(getrusage());
/* prints
Array
(
[ru_oublock] => 0
[ru_inblock] => 0
[ru_msgsnd] => 2
[ru_msgrcv] => 3
[ru_maxrss] => 12692
[ru_ixrss] => 764
[ru_idrss] => 3864
[ru_minflt] => 94
[ru_majflt] => 0
[ru_nsignals] => 1
[ru_nvcsw] => 67
[ru_nivcsw] => 4
[ru_nswap] => 0
[ru_utime.tv_usec] => 0
[ru_utime.tv_sec] => 0
[ru_stime.tv_usec] => 6269
[ru_stime.tv_sec] => 0
)
*/ 
ثابتهای جادویی!

Php از ثابتهای بسیار مفیدی استفاده میکنه که در زیر یه تعدادی رو براتون میذارم :
__LINE__ خط فعلی برنامه
__FILE__ مسیر فایل
__DIR__ مسیر دایرکتوری فایل جاری
__FUNCTION__ نام تابع جاری
__CLASS__ نام کلاس جاری
__METHOD__ نام متد جاری
__NAMESPACE__ فضای نام جاری

کد php:
// this is relative to the loaded script's path
// it may cause problems when running scripts from different directories
require_once('config/database.php');
// this is always relative to this file's path
// no matter where it was included from
require_once(dirname(__FILE__) . '/config/database.php'); 
ساخت یک شناسه منحصر به فرد :
گاهی اوقات ممکنه شما بخواید یک رشته منحصر به فرد درست کنید.پی اچ پی یک تابع با نام uniqid() برای همین کار در اختیار ما گذاشته :
کد php:
// generate unique string
echo uniqid();
/* prints
4bd67c947233e
*/
// generate another unique string
echo uniqid();
/* prints
4bd67c9472340
*/ 
اگر توجه کنید میبینید که ابتدای رشته های ایجاد شده مثل هم هستند.این به دلیله که تابع uniqid() برای ساخت چنین رشته هایی از زمان سیستم استفاده میکنه.
برای اینکه امکان شباهت دوتا رشته رو کم کنیم میتونیم یک پیشوند به تابع پاس بدیم.
کد php:
// with prefix
echo uniqid('foo_');
/* prints
foo_4bd67d6cd8b8f
*/
// with more entropy
echo uniqid('',true);
/* prints
4bd67d6cd8b926.12135106
*/
// both
echo uniqid('bar_',true);
/* prints
bar_4bd67da367b650.43684647
*/
7-Serialization 
آیا تا حالا نیاز داشتید که یک متغیر پیچیده رو توی فایل یا دیتابیس ذخیره کنید؟ لازم نیست با یک راه حل فانتزی یک آرایه رو به رشته قالب بندی شده تبدیل کنید.بااستفاده از تابع serialize() وunserialize() به راحتی میتونید این کارو انجام بدید :
کد php:
// a complex array
$myvar = array(
'hello',
42,
array(
1,'two'),
'apple'
);
// convert to a string
$string = serialize($myvar);
echo 
$string;
/* prints
a:4:{i:0;s:5:"hello";i:1;i:42;i:2;a:2:{i:0;i:1;i:1;s:3:"two";}i:3;s:5:"apple";}
*/
// you can reproduce the original variable
$newvar = unserialize($string);
print_r($newvar);
/* prints
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => apple
)
*/ 
این دوتا تابع از توابع بومی پی اچ هستن.اما از وقتی که JSON مجبوب تر شده دوتاتابع دیگه هم به پی اچ پی اضافه شد که json_enphp() و json_dephp() نام دارن که توابع بسیار مفیدی هستند.

کد php:
// a complex array
$myvar = array(
'hello',
42,
array(
1,'two'),
'apple'
);
// convert to a string
$string = json_enphp($myvar);
echo 
$string;
/* prints
["hello",42,[1,"two"],"apple"]
*/
// you can reproduce the original variable
$newvar = json_dephp($string);
print_r($newvar);
/* prints
Array
(
[0] => hello
[1] => 42
[2] => Array
(
[0] => 1
[1] => two
)
[3] => apple
)
*/ 
این توابع خیلی بهتر از دوتا تابع قبلی هستن چون با جاوااسکریپت و بیشتر زبانهای برنامه نویسی دیگه سازگارن.
۸-فشرده سازی رشته ها
وقتی بحث از فشرده سازی میشه ما معمولا فایلها به ذهنمون میاد.این امکان در پی اچ پی وجود داره که بشه رشته هارو به حالت فشرده در آورد.
در مثال زیر ما از دوتا تابع gzcompress() و gzuncompress() برای این کار استفاده میکنیم :
کد php:
$string =
"Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Nunc ut elit id mi ultricies
adipiscing. Nulla facilisi. Praesent pulvinar,
sapien vel feugiat vestibulum, nulla dui pretium orci,
non ultricies elit lacus quis ante. Lorem ipsum dolor
sit amet, consectetur adipiscing elit. Aliquam
pretium ullamcorper urna quis iaculis. Etiam ac massa
sed turpis tempor luctus. Curabitur sed nibh eu elit
mollis congue. Praesent ipsum diam, consectetur vitae
ornare a, aliquam a nunc. In id magna pellentesque
tellus posuere adipiscing. Sed non mi metus, at lacinia
augue. Sed magna nisi, ornare in mollis in, mollis
sed nunc. Etiam at justo in leo congue mollis.
Nullam in neque eget metus hendrerit scelerisque
eu non enim. Ut malesuada lacus eu nulla bibendum
id euismod urna sodales. "
;
$compressed = gzcompress($string);
echo 
"Original size: ". strlen($string)."n";
/* prints
Original size: 800
*/
echo "Compressed size: ". strlen($compressed)."n";
/* prints
Compressed size: 418
*/
// getting it back
$original = gzuncompress($compressed); 
با این توابع ما میتونیم حدود ۵۰% از حجم یک رشته رو کم کنیم.همچین توابع gzenphp() و gzdephp()با یک الگوریتم دیگه میتونن همین مقدار از حجم رشته هارو فشرده کنن.
register_shutdown_function()

تابع register_shutdown_function() میتونید تعیین کنید قبل از اینکه اسکریپت شما به اتمام برسه چه تابعی اجرا بشه.اما اگر اسکریپت شما با دستور exit به پایان برسه یا یک خطا رخ بده ویا برنامه به وسیله کاربر متوقف بشه (باکلیک روی دوکمه stop مرورگر )

کد php:
view sourceprint?
$start_time = microtime(true);
register_shutdown_function('my_shutdown');
// do some stuff
// ...
function my_shutdown() {
global 
$start_time;
echo 
"execution took: ".
(
microtime(true) - $start_time).
" seconds.";
} 
 *شما قادر به دیدن لینک ها نیستید ثبت نام کنید یا وارد حساب خود شوید تا بتوانید لینک ها را ببینید*
خورشید باش که اگر خواستی بر کسی نتابی نتوانی.
ارسال‌ها
پاسخ
« قدیمی‌تر | جدیدتر »


  • مشاهده‌ی نسخه‌ی قابل چاپ
پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان
مکان تبلیغ شما
تمامی حقوق این سایت مربوط به انجمن های تخصصی علوم رایانه و هنرهای دیجیتال میباشد
حالت خطی
حالت موضوعی