# زبان های اسکریپتی > PHP > گفتگو: Tip های برنامه نویسی

## yaqubian

با سلام خدمت تمام دوستان خودم در این تالار
لطفا کلیه نکاتی که به نظرتون جالب می رسه و شاید کمتر کسی اونا رو دیده باشه یعنی همون tip های برنامه نویسی رو در این تاپیک قرار بدید.
لطفا از ارسال هر گونه پست اضافی جدا خودداری نمایید.
موفق باشید

----------


## امید امرایی

دسترسی به Registry در ویندوز :


$Shell = &new COM('WScript.Shell');

$Shell->RegWrite($key,$value);

Shell->RegRead($key);

$Shell->RegDelete($key);


ببخشید اگه خیلی خلاصه بود . به نظرم بسیار واضح اومد

----------


## Yousha

نکات و اصول مهم در برنامه نویسی(1#)

نکات و اصول مهم در برنامه نویسی(2#)

----------


## yaqubian

دوستان عزیز
چند نکته:
1- سرعت پردازش echo به مراتب بالاتر از print هستش!
2- به جای concat کردن چند رشته بهتر اونا رو بصورت echo های جدا چاپ کنیم!
3- واسه حلقه for مقدار maxvalue تون رو قبل از حلقه set کنین نه داخل حلقه!
4- واسه آزادسازی حافظه متغیرهاتون رو unset کنین مخصوصا آرایه های خیلی بزرگ رو!
5- حتی الامکان از این دستورات استفاده نکنین get__ و set__ و autoload__
6- تا جایی که ممکنه از require_once استفاده نکنیم!
ادامه دارد ...

----------


## yaqubian

/**
* Class for handling htaccess of Apache
* @author    Sven Wagener <sven.wagener@intertribe.de>
* @copyright Intertribe - Internetservices Germany
* @include 	 Funktion:_include_
*/

class htaccess{
    var $fHtaccess=""; // path and filename for htaccess file
    var $fHtgroup="";  // path and filename for htgroup file
    var $fPasswd="";   // path and filename for passwd file
    
    var $authType="Basic"; // Default authentification type
    var $authName="Internal area"; // Default authentification name

    /**
    * Initialising class htaccess
    */
    function htaccess(){
    }

    /**
    * Sets the filename and path of .htaccess to work with
    * @param string	$filename    the name of htaccess file
    */
    function setFHtaccess($filename){
        $this->fHtaccess=$filename;
    }
    
    /**
    * Sets the filename and path of the htgroup file for the htaccess file
    * @param string	$filename    the name of htgroup file
    */
    function setFHtgroup($filename){
        $this->fHtgroup=$filename;
    }
    
    /**
    * Sets the filename and path of the password file for the htaccess file
    * @param string	$filename    the name of htgroup file
    */
    function setFPasswd($filename){
        $this->fPasswd=$filename;
    }

    /**
    * Adds a user to the password file
    * @param string $username     Username
    * @param string $password     Password for Username
    * @param string $group        Groupname for User (optional)
    * @return boolean $created         Returns true if user have been created otherwise false
    */
    function addUser($username,$password,$group){
        // checking if user already exists
        $file=@fopen($this->fPasswd,"r");
        $isAlready=false;
        while($line=@fgets($file,200)){
            $lineArr=explode(":",$line);
            if($username==$lineArr[0]){
                $isAlready=true;
             }
        }
        
        if($isAlready==false){
            $file=fopen($this->fPasswd,"a");

            $password=crypt($password);
            $newLine=$username.":".$password."\n";

            fputs($file,$newLine);
            fclose($file);
            return true;
        }else{
            return false;
        }
    }

    /**
    * Adds a group to the htgroup file
    * @param string $groupname     Groupname
    */
    function addGroup($groupname){
        $file=fopen($this->fHtgroup,"a");
        fclose($file);
    }

    /**
    * Deletes a user in the password file
    * @param string $username     Username to delete
    * @return boolean $deleted    Returns true if user have been deleted otherwise false
    */
    function delUser($username){
        // Reading names from file
        $file=fopen($path.$this->fPasswd,"r");
        $i=0;
        while($line=fgets($file,200)){
            $lineArr=explode(":",$line);
            if($username!=$lineArr[0]){
                $newUserlist[$i][0]=$lineArr[0];
                $newUserlist[$i][1]=$lineArr[1];
                $i++;
            }else{
                $deleted=true;
            }
        }
        fclose($file);

        // Writing names back to file (without the user to delete)
        $file=fopen($path.$this->fPasswd,"w");
        for($i=0;$i<count($newUserlist);$i++){
            fputs($file,$newUserlist[$i][0].":".$newUserlist[$i][1]."\n");
        }
        fclose($file);
        
        if($deleted==true){
            return true;
        }else{
            return false;
        }
    }
    
    /**
    * Returns an array of all users in a password file
    * @return array $users         All usernames of a password file in an array
    * @see setFPasswd()
    */
    function getUsers(){
    }
    
    /**
    * Sets a password to the given username
    * @param string $username     The name of the User for changing password
    * @param string $password     New Password for the User
    * @return boolean $isSet      Returns true if password have been set
    */    
    function setPasswd($username,$new_password){
        // Reading names from file
        $newUserlist="";
        
        $file=fopen($this->fPasswd,"r");
        $x=0;
        for($i=0;$line=fgets($file,200);$i++){
            $lineArr=explode(":",$line);
            if($username!=$lineArr[0] && $lineArr[0]!="" && $lineArr[1]!=""){
                $newUserlist[$i][0]=$lineArr[0];
                $newUserlist[$i][1]=$lineArr[1];
                $x++;
            }else if($lineArr[0]!="" && $lineArr[1]!=""){
                $newUserlist[$i][0]=$lineArr[0];
                $newUserlist[$i][1]=crypt($new_password)."\n";
                $isSet=true;
                $x++;
            }
        }
        fclose($file);

        unlink($this->fPasswd);

        /// Writing names back to file (with new password)
        $file=fopen($this->fPasswd,"w");
        for($i=0;$i<count($newUserlist);$i++){
            $content=$newUserlist[$i][0].":".$newUserlist[$i][1];
            fputs($file,$content);
        }
        fclose($file);

        if($isSet==true){
            return true;
        }else{
            return false;
        }
    }

    /**
    * Sets the Authentification type for Login
    * @param string $authtype     Authentification type as string
    */
    function setAuthType($authtype){
        $this->authType=$authtype;
    }

    /**
    * Sets the Authentification Name (Name of the login area)
    * @param string $authname     Name of the login area
  	*/
    function setAuthName($authname){
        $this->authName=$authname;
    }

    /**
    * Writes the htaccess file to the given Directory and protects it
    * @see setFhtaccess()
  	*/
    function addLogin(){
       $file=fopen($this->fHtaccess,"w+");
       fputs($file,"Order allow,deny\n");
       fputs($file,"Allow from all\n");
       fputs($file,"AuthType        ".$this->authType."\n");
       fputs($file,"AuthUserFile    ".$this->fPasswd."\n\n");
       fputs($file,"AuthName        \"".$this->authName."\"\n");
       fputs($file,"require valid-user\n");
       fclose($file);
    }

    /**
    * Deletes the protection of the given directory
    * @see setFhtaccess()
    */
    function delLogin(){
        unlink($this->fHtaccess);
    }
}

----------


## yaqubian

7- استفاده از مسیرهای کامل تو include یا require ها زمان کمتری رو صرف می کنه تا اینکه بخوایم اونا resolve کنیم به وسیله مسیرهای OS.
8- از $_SERVER[’REQUEST_TIME’] بجای تابع time تو محاسبه زمان execute یه اسکریپت استفاده کنیم.
9- تا حد ممکن از strncasecmp و strpbrk و stripos بجای regex استفاده کنیم.
10- str_replace  به مراتب سریعتر از preg_replace عمل می کنه!
11- mod_deflate  رو در آپاچی on کنید!
12- از @ واسه جلوگیری از بروز خطا حتی المقدور استفاده نکنیم.
ادامه دارد ...

----------


## zoghal

کار این مود mod_deflate چیه

----------


## yaqubian

دوست عزیز
کارش comprerss کردن! یه چیزی شبیه gzip!
موفق باشید

----------


## Yousha

برای چک/صحت HTTP header:

function _Check_HTTP_Header($Int_QueryLength= 100, $Int_URILength= 100)
{
# ~!@
return(strlen((string)$_SERVER['QUERY_STRING']) >= (int)$Int_QueryLength || strlen((string)$_SERVER['REQUEST_URI']) >= (int)$Int_URILength || strlen((string)$_SERVER['HTTP_USER_AGENT']) >= 255 || strstr((string)$_SERVER['QUERY_STRING'], '//') || strstr((string)$_SERVER['REQUEST_URI'], '//') || strstr((string)$_SERVER['HTTP_USER_AGENT'], '//') || strstr((string)$_SERVER['HTTP_REFERER'], '///') || strstr((string)$_SERVER['QUERY_STRING'], '\\') || strstr((string)$_SERVER['REQUEST_URI'], '\\') || strstr((string)$_SERVER['HTTP_USER_AGENT'], '\\') || strstr((string)$_SERVER['HTTP_REFERER'], '\\') || strstr((string)$_SERVER['QUERY_STRING'], '..') || strstr((string)$_SERVER['REQUEST_URI'], '..') || strstr((string)$_SERVER['HTTP_USER_AGENT'], '..') || strstr((string)$_SERVER['HTTP_REFERER'], '..') || strstr((string)$_SERVER['QUERY_STRING'], '::') ||strstr((string)$_SERVER['REQUEST_URI'], '::') || strstr((string)$_SERVER['HTTP_USER_AGENT'], '::') || strstr((string)$_SERVER['HTTP_REFERER'], '::') || strstr((string)$_SERVER['QUERY_STRING'], '~') ||strstr((string)$_SERVER['REQUEST_URI'], '~') || strstr((string)$_SERVER['HTTP_USER_AGENT'], '~') || strstr((string)$_SERVER['HTTP_REFERER'], '~') || (strtoupper($_SERVER['REQUEST_METHOD']) != 'GET' && strtoupper($_SERVER['REQUEST_METHOD']) != 'POST')) ? @exit('') : (bool)true;
}

برای پاکسازی HTTP header:

function _Clean_HTTP_Header()
{
$_SERVER['QUERY_STRING']= htmlentities((string)$_SERVER['QUERY_STRING']);
$_SERVER['REQUEST_URI']= htmlentities((string)$_SERVER['REQUEST_URI']);
$_SERVER['HTTP_USER_AGENT']= htmlentities((string)$_SERVER['HTTP_USER_AGENT']);
$_SERVER['HTTP_REFERER']= htmlentities((string)$_SERVER['HTTP_REFERER']);
return((bool)true);
} 

موفق باشید.

----------


## yaqubian

دوستان عزیز
اینم چند تا نکته واسه بالا بردن performance !
http://atomized.org/2005/04/php-perf...est-practices/
موفق باشید

----------


## smhnaji

40 Tips for optimizing your php code

راستی، این سایت http://reinholdweber.com/ از نظر سی‌اس‌اس و کلا DHTML هم جالبه :)

یه نگاه کوچولویی بندازین بد نیست :چشمک:

----------


## amirhosein

بجاي دابل كوتيشن بهتره كه حتي المقدور از تك كوتيشن استفاده بشه چون پردازشي روش صورت نميگيره.

----------


## Yousha

نکات و اصول مهم در برنامه نویسی(3#)

----------


## Mohammadrezag

دوست عزيز واقعا گل كاشتي ، تاپيك بسيار خوبيه ! ممنون
كاش بعضي از نكاتي كه مي گي رو يه ريزه بيشتر توضيح بدي مثلا دليل اين چيه ؟
و چه راهكاري داره ؟
ممنونم رفيق



> 12- از @ واسه جلوگیری از بروز خطا حتی المقدور استفاده نکنیم.

----------


## Yousha

سلام،



> کار این مود mod_deflate چیه


در واقع خروجی رو فشرده می کنه... یا به عبارتی سرعت Download/Access فایل ها رو بالا می بره...
*مثلاً* به این شکل:

<IfModule mod_deflate.c>
AddOutputFilterByType Deflate application/x-javascript text/css text/html text/xml
</IfModule>




> مثلا دليل اين چيه ؟
> و چه راهكاري داره ؟
> ممنونم رفيق
> نقل قول:12- از @ واسه جلوگیری از بروز خطا حتی المقدور استفاده نکنیم.


@ در واقع Error ignoring انجام میده. عیبش هم اینه که سرعت انجام کار اون دستور/تابع رو پایین میاره. مثلاً برای دستور header خوبه.



> 7- استفاده از مسیرهای کامل تو include یا require ها زمان کمتری رو صرف می کنه تا اینکه بخوایم اونا resolve کنیم به وسیله مسیرهای OS.
> ..................................................  ......................
> امکانش هست یک مثال بزنید؟


مثلاً: require('c:/www/root/xxxxx.php');

----------


## Jason.Bourne

مثلاً: require('c:/www/root/xxxxx.php');[/quote]




> به وسیله مسیرهای OS.


منظور از "مسیرهای OS" چی هست؟

----------


## hosseintdk775

> مثلاً: require('c:/www/root/xxxxx.php');




منظور از &quot;مسیرهای OS&quot; چی هست؟[/quote]

 بسم الله الرحمن الرحیم
سلام
os همون سیستم عامل است / همونطوری که اطلاع دارید در ویندوز و لینوکس مسیر دهی فایل ها با هم تفاوت داره
----
و روش مسیر دهی هم بستگی به سیستم عامل شما یا همون به اصطلاح os داره

----------


## Jason.Bourne

> 7- استفاده از مسیرهای کامل تو include یا require ها زمان کمتری رو صرف می کنه تا اینکه بخوایم اونا resolve کنیم به وسیله مسیرهای OS.


من متوجه جمله بالا نشدم که مسیر کامل چی هست و  resolve کردن به وسیله مسیرهای OS چی هست.

مثلا مسیردهی زیر کدام روش است؟ به مسیر سیستم عامل یا مسیر کامل؟
require('c:/www/root/xxxxx.php');

----------


## alihoseini

> من متوجه جمله بالا نشدم که مسیر کامل چی هست و  resolve کردن به وسیله مسیرهای OS چی هست.
> 
> مثلا مسیردهی زیر کدام روش است؟ به مسیر سیستم عامل یا مسیر کامل؟
> require('c:/www/root/xxxxx.php');


اين آدرس دهي بيشتر  حالت لينوكسي هستش ولي تو وينوز هم درست كار ميكنه اما اگه بصورت ويندوزي آدرس بدين تو لينوكس كار نميكنه مثل :
c:\www\root\xxxxx.phpبراي آدرس دهي كامل يك فايل به نظر من يك مسير پايه تعريف كنين و بقيه مسيرها رو براساس اون تعريف كنين خيلي بهتره

----------


## yasercomeng

نحوه دستكاري تاريخ و انواع نمايش تاريخ:

<?php 
$currentDate = date("Y-m-d");// current date
echo "Current Date: ".$currentDate."<br>"; 
$date30DaysAdded = date('Y-m-d', strtotime("+30 days"));
echo "30 Days added: ".$date30DaysAdded."<br>"; 
$date10YearsBack = date('Y-m-d', strtotime("-10 years"));
echo "10 Years back: ".$date10YearsBack."<br>";?> 



خروجي كد بالا به صورت زير است:
 
Current Date: 2009-09-17 
 
30 Days added: 2009-10-17 
 
10 Years back: 1999-09-17 



تركيب تابع strtotime و date به منظور اضافه يا كم كردن چند روز، ماه، يا سال به تاريخ مورد نظر مي باشد. 


$timestamp=time(); //current timestamp 


 
echo "Current Time: $timestamp<br>"; 
$tm=$timestamp+172800; // Will add 2 days to the $timestamp 
$da=date("F j, Y, g:i a", $timestamp);
echo "Current time string: $da <br>";
$da1=date("F j, Y, g:i a", $tm); 
echo "Modified time: $da1 <br>";
 


خروجي كد بالا به صورت زير مي باشد: 
Current Time: 1253192379 


 
Current time string: September 17, 2009, 12:59 pm  
Modified time: September 19, 2009, 12:59 pm 
 


نمايش تاريخ امروز: 
$DateTimeArray=explode(" ",date("Y-m-d H:m:s")); 


 
$DateArray=explode("-",$DateTimeArray[0]); 
$TimeArray=explode(":",$DateTimeArray[1]); 
$Time=mktime($TimeArray[0],$TimeArray[1],$TimeArray[2],$DateArray[1],$DateArray[2],$DateArray[0]);
$DateString=date("l d F H:m:s",$Time); 
echo $DateString;
 


خروجي به صورت: 
Thursday 17 September 13:09:41 

نمايش روز هفته: 

$date_time_array = getdate( time() ); 


 
echo $date_time_array['weekday'];

خروجي به صورت: 
Thursday 

علاوه بر weekday مقادير زير امكان پذير مي باشد: 

"seconds"ثانيه ها"minutes"دقايق"hours"ساعات"mday"روز ماه"wday"روز هفته به صورت عددي"mon"شماره ماه"year"سال"yday"روز سال به صورت عددي"month"نام كامل ماه 

اين هم تابع مربوط به اضافه و كم كردن روز، ماه، سال كه مثالي از آن در بالا آمده بود: 

function DateAdd($interval, $number, $date) { 


 
 $date_time_array = getdate($date); 
 $hours = $date_time_array['hours']; 
 $minutes = $date_time_array['minutes'];
 $seconds = $date_time_array['seconds'];
 $month = $date_time_array['mon'];
 $day = $date_time_array['mday'];
 $year = $date_time_array['year'];
 switch ($interval) {
     case 'yyyy':
         $year+=$number;
         break;
     case 'q':
         $year+=($number*3);
         break;
     case 'm':
         $month+=$number;
         break;
     case 'y':
     case 'd':
     case 'w':
         $day+=$number;
         break;
     case 'ww':
         $day+=($number*7);
         break;
     case 'h':
         $hours+=$number;
         break
     case 'n':
         $minutes+=$number;
         break;
     case 's':
         $seconds+=$number;
         break;
 }
    $timestamp= mktime($hours,$minutes,$seconds,$month,$day,$year)  ;
 return $timestamp; 
}
 


مقدار متغير interval به صورت زير مي باشد: 
yyyyسالqربع ساعتmماهyروز سالdروزwروز هفتهwwشماره هفته سالhساعتnدقيقهsثانيه 

منبع : www.phpbuilder.com

----------


## yasercomeng

كدي براي حذف كليه دايركتوري ها و فايل هاي درون آن:


function rmDirectory($path)


{
 if (is_dir($path))
 {
     if (version_compare(PHP_VERSION, '5.0.0') < 0)
     {
       $entries = array();
       if ($handle = opendir($path))
       {
           while (false !== ($file = readdir($handle)))
               $entries[] = $file;
           closedir($handle);
       }
     }
     else
     {
       $entries = scandir($path);
       if ($entries === false)
           $entries = array(); // just in case scandir fail...
     }
     foreach ($entries as $entry)
     {
        if ($entry != '.' && $entry != '..')
        {
          rmDirectory($path.'/'.$entry);
        }
     }
     return rmdir($path);
 }
 else
 {
   return unlink($path);
 }
}
function rmFiles($path)
{
  if (is_dir($path))
 {
     if (version_compare(PHP_VERSION, '5.0.0') < 0)
     {
       $entries = array();
       if ($handle = opendir($path))
       {
           while (false !== ($file = readdir($handle)))
               $entries[] = $file;
           closedir($handle);
       }
     }
     else
     {
       $entries = scandir($path);
       if ($entries === false)
           $entries = array(); // just in case scandir fail...
     }
     foreach ($entries as $entry)
     {
        if ($entry != '.' && $entry != '..')
          rmFiles($path.'/'.$entry);
     }
 }
 else
 {
   return unlink($path);
 }

}

----------


## yasercomeng

تعيين نوع مرورگر:


function getBrowser($userAgent) {


 // Create list of browsers with browser name as array key and user agent as value.
$browsers = array(
 'Opera' => 'Opera',
 'Mozilla Firefox'=> '(Firebird)|(Firefox)', // Use regular expressions as value to identify browser
 'Galeon' => 'Galeon',
 'Mozilla'=>'Gecko',
 'MyIE'=>'MyIE',
 'Lynx' => 'Lynx',
 'Netscape' => '(Mozilla/4\.75)|(Netscape6)|(Mozilla/4\.08)|(Mozilla/4\.5)|(Mozilla/4\.6)|(Mozilla/4\.79)',
 'Konqueror'=>'Konqueror',
 'SearchBot' => '(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp/cat)|(msnbot)|(ia_archiver)',
 'Internet Explorer 7' => '(MSIE 7\.[0-9]+)',
 'Internet Explorer 6' => '(MSIE 6\.[0-9]+)',
 'Internet Explorer 5' => '(MSIE 5\.[0-9]+)',
 'Internet Explorer 4' => '(MSIE 4\.[0-9]+)',
);
foreach($browsers as $browser=>$pattern) { // Loop through $browsers array
   // Use regular expressions to check browser type
 if(eregi($pattern, $userAgent)) { // Check if a value in $browsers array matches current user agent.
  return $browser; // Browser was matched so return $browsers key
 }
}
return 'Unknown'; // Cannot find browser so return Unknown

}

----------


## اوبالیت به بو

Mime type in php:


http://www.php.net/manual/en/functio...ntent-type.php

----------


## Reza1607

> 6- تا جایی که ممکنه از require_once استفاده نکنیم!


میشه توضیح بدید که باید برای چی از require_once  تا جای امکان استفاده نکرد(منظورتون رو نفهمیدم  :ناراحت: )


فکر کنم بشه برای مسیر کامل از این کد استفاده کرد

require_once('http://'.$_SERVER['HTTP_HOST'].'/مسیر فایل ها');

اگه این کد اشکال داره لطفا توضیح بدید ممنون

----------


## taknegaar

> میشه توضیح بدید که باید برای چی از require_once  تا جای امکان استفاده نکرد(منظورتون رو نفهمیدم )
> 
> 
> فکر کنم بشه برای مسیر کامل از این کد استفاده کرد
> 
> require_once('http://'.$_SERVER['HTTP_HOST'].'/مسیر فایل ها');اگه این کد اشکال داره لطفا توضیح بدید ممنون


کلا این مسائل برای سرعت بیشتر در اجراست؛ 
که البته خیلی هاشون انقدر تاثیری بر اجرای اکثر سایتها نداره 
مثلا یه دستوری که 1 هزارم ثانیه طول میکشه اگر تو یه سایتی هر دقیقه یک بار اجرا میشه تغییرش هم محسوس نیست، 
اما تو یه سایتی که هر ثانیه بیش از 1000 هزار بار اجرا میشه اگه بتونید اصلاحش کنید خوب محسوس میشه.
در کل منظور این مسائل بیشتر سایتهای حرفه ای هستند نه یه وبلاگ یا سایت معمولی.
مثلا استفاده از " در کدها بجای ' برای string ها کندتره 
چون Php مقادیر داخل اونها رو اول تفسیر میکنه (برای جاگذاری مقادیر احتمالی)
و این کاراکتر چون در کدتون احتمالا زیاده، احتمال تاثیرش هم بیشتر از مورد قبل هست.

***

اما اون دستوری که گفتید:

require_once

در php   چهار دستور برای فراخوانی فایلهای php هست: 

require

شما با این دستور میگید به یه فایل برای الحاق نیاز دارید و اگر نباشه برنامه متوقف میشه.

require_once

شما با این دستور میگید به یه فایل برای الحاق نیاز دارید و اگر نباشه  برنامه متوقف میشه، 
البته با این تفاوت که برنامه چک میکنه که این فایل قبلا صدا زده شده از همون مقادیر قبلی استفاده میکنه و دیگه نیازی به لود شدن نیست.
در بعضی جاها که فایلی زیاد استفاده میشه خوبه ولی دقت کنید که اگه انقدر تمیز برنامه نوشتید که همه چی در کنترل هست و فایلها هم یه بار فراخوانی میشن دیگه نیازی نیست به سیستم یه کش رو تحمیل کنید.

include_once

مثل دستور require_once با این تفاوت که اگر نباشه یه خطا میده و برنامه ادامه پیدا میکنه.


include

مثل دستور require با این تفاوت که اگر نباشه یه خطا میده و برنامه  ادامه پیدا میکنه.

***

برای مسیر دادن به فایلهای الحاقی نیازی نیست کد برنامه رو الکی بزرگ کنید؛
یه دفعه مسیر رو اول برنامه ست کنید بعد فقط نام فایل رو بگید:


set_include_path('../inc/');


در ضمن مسیر اینترنتی هم ندید، 
چون بعضی وقتها بدلیل امنیتی در دسترس نیست و همچنین سرعتش کندتر میشه؛ 
آدرس باید شاخه باشه. 
مثلا دستور بالا میگه یه شاخه قبل شاخه جاری و در دایرکتوری inc بگرد؛ 
یعنی تو روت هم نیست.


حالا فقط بگو 



include 'test.php';

----------


## taknegaar

> كدي براي حذف كليه دايركتوري ها و فايل هاي درون آن:
> 
> 
> function rmDirectory($path)
> 
> {
>  if (is_dir($path))
>  {
>      if (version_compare(PHP_VERSION, '5.0.0') < 0)
> ...



بدون شرح!



        $files = glob('./cache/*.*');
foreach($files as $file)
      unlink($file);

----------


## Reza1607

یه سری هم به لینک زیر بزنید چند کد خوب گذاشتم
https://barnamenevis.org/showthread.php?t=215150

----------


## bestirani2

> 5- حتی الامکان از این دستورات استفاده نکنین get__ و set__ و autoload__
> ادامه دارد ...


دلیلتون برای استفاده نکردن از autoload__ چی هست؟
به نظرم من استفاده از این باعث میشه مدریت فایل ها راحت تر بشه و بدلیل اینکه فایلی که گنجانده میشه کمتر هست، حجم برنامه هم کاهش میابد

----------


## zerocool.3830

سلام . چرا از Require_once  نباید استفاده کرد ؟ :متفکر:

----------


## eshpilen

بنظرم یک مطلب کاملا غلط در اینجا بیان شده.
Require_once فایل اینکلود شده رو کش نمیکنه.
کار Require_once همونطور که از اسمش پیداست، اینه که فقط در اولین دستور Require_once فایل مورد نظر اینکلود میشه (و البته بخاطر Require بودنش، اگر اون فایل پیدا نشه اسکریپت با خطا متوقف میشه) و بقیهء دستورهای require_once در یک فایل PHP خاص، کاملا بی اثر خواهند بود.
بخشهای از تعریف از رفرنس PHP:

with the only difference being that if the code from a file has already     been included, it will not be included again

*require_once()* should be used in cases where     the same file might be included and evaluated more than once during a     particular execution of a script, and you want to be sure that it is     included exactly once to avoid problems with function redefinitions,     variable value reassignments, etc.    

همونطور که از این توضیحات مشخص هست، ما اغلب در مواردی از require_once استفاده میکنیم که دستور اینکلود برای فایل اینکلود شونده ممکنه چندبار در فایل PHP ما رخ بده، اما چون در فایل اینکلود شونده چیزهایی مثل تعریف تابع و غیره داریم، اینکلود شدن مجدد اون موجب صدور خطا توسط PHP یا خطاهای منطقی در برنامهء ما میشه.
درواقع هدف ما اینکلود کردن چندباره اون فایل نبوده، بلکه بعلل فنی دستور اینکلود اون فایل ممکنه چندبار تکرار بشه اما ما عملا فقط به یکبار اینکلود شدن اون نیاز داریم.

اینم یه مثال که این خاصیت نادیده گیری اینکلودهای بعدی رو نشون میده:
test.php
<?php
require_once 'inc.php';
require_once 'inc.php';    
?>
inc.php
<?php
echo 'Hi there!<br>';
?>
در این آزمایش ما عبارت Hi there! رو فقط یکبار خواهیم دید، درحالیکه دوبار دستور require_once استفاده شده.

راستی خوبه که دوست گرامی بفرمایند خودشون به این نتیجه رسیدن و چرا و چطوری، یا این مطلب اشتباه رو از جای دیگه ای خوندن.

----------


## eshpilen

یک مورد دیگه هم که بیان شده تشویق به استفاده از آدرس دهی مطلق برای اینکلود کردن هست، که باید بگم بنظر من اینمورد هم یک توصیهء کاملا غلطه.
درسته که سرعت اجرا در این حالت شاید بالا بره، اما این مقدار افزایش سرعت عملا خیلی ناچیز هست، و درمقابل ما داریم با اینکار از اصول برنامه نویسی صحیح خارج میشیم. چون برنامهء ما به مسیرهای از پیش تعریف شده وابسته میشه، درحالیکه ما همیشه باید از اینطور چیزها پرهیز کنیم و برنامه هرچه ساده تر و منعطف تر باشه. هرچند شاید بشه روشی برای تخفیف یا برطرف کردن این ضعف پیدا کرد، اما افزایش سرعت ما اونقدر ناچیزه و در تقریبا تمام کاربردها بی ارزش، که فکر نمیکنم ارزش امتحان کردن رو هم داشته باشه. اینکار برنامهء ما رو پیچیده تر میکنه.
یک مزیت برنامه نویسی مدرن و زبانهای مدرن همین چیزهاست و اگر ما بخوایم بخاطر کوچکترین افزایش سرعت، قابلیت هایی مثل خوانایی و انعطاف و سادگی و حجم کمتر رو فدا کنیم، اصلا منطقی نیست.
سیستمی که بخواد اونقدر محدودیت منابع یا بار مفرط داشته باشه که چنین چیزهایی بخواد کمکی بهش بکنه و برنامهء ما رو از غیرقابل استفاده به قابل استفاده تبدیل بکنه، بیشتر در خیال وجود داره تا واقعیت. و بهینه سازی در عرصه هایی صورت میگیره که بیشترین تاثیر رو داشته باشن و واقعا مورد نیاز باشن، نه در یک چنین چیزهای جزیی که جزو ساده ترین امکانات پایه ای برای برنامه نویسی اصولی و راحت و سریع هستن.
خلاصه بازم میتونم کلی توضیح بدم که چرا این استدلالها و توصیه ها غلط هست، ولی فکر میکنم خودتون فهمیده باشید و بتونید روش استدلال رو ادامه و تعمیم بدید و به مزایا و معایب دیگه برسید. اگر بازم ابهامی بود بگید تا روش بحث کنیم. البته بنده از اینطور اظهار نظرها و توصیه ها زیاد و جاهای دیگه هم دیدم که بنظرم باید براش فکری بشه؛ شاید باید یک تاپیک برای بحث در اینمورد بزنیم!

----------


## thinking21

> دلیلتون برای استفاده نکردن از* autoload__* چی هست؟
> *به نظرم من استفاده از این باعث میشه مدریت فایل ها راحت تر بشه و بدلیل اینکه فایلی که گنجانده میشه کمتر هست، حجم برنامه هم کاهش میابد*


سلام (من با  این مشکل دارم)
می شه در مورد (    autoload__  )توضییح بدین با مثال .. 




> 5*- حتی الامکان از این دستورات استفاده نکنین get__ و set__ و autoload__*




 چرا نباید ازش استفاده کرد...
متشکر.

----------


## bestirani2

> سلام (من با  این مشکل دارم)
> می شه در مورد (    autoload__  )توضییح بدین با مثال .. 
> متشکر.


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

----------


## thinking21

> وقتی یک یک نمونه شی از یک کلاس که توی صفحه وجود ندارد ایجاد میکنیم، در صورتی که از autoload__استفاده کنیم، قبل از اینکه با پیغام خطا مواجه بشیم، این تابع اجرا می شود که میتوان در آن، فایل مربوط به آن کلاس را اینکلود کرد


من یه مثال تو کتاب php5 دارم ولی وقتی که اجراش می کنم اررور می ده 
وتا حالا هم از این نوع استفاده نکردم به خاطر همین نمی دونم مشکل کجاست 
میشه شما نگاه کنین ببینین باید چطوری استفاده کنم؟
ممنون

مثال:
*فایل MyClass.PHP*

class MyClass{
 function printHelloWorld()
 {
 print " hello world ";
  }
 }
*فایل general.inc :*


function __autoload($class_name)
{
require_once( $_SERVER["DOCUMENT_ROOT"]. "/classes/$class_name.PHP" );
}

*این هم فایل main.PHP :*

require_once " general.inc ";
$obj = new MyClass();
$obj->printHelloWorld();

----------


## sedamorde

> برای چک/صحت HTTP header:
> 
> function _Check_HTTP_Header($Int_QueryLength= 100, $Int_URILength= 100)
> {
> # ~!@
> return(strlen((string)$_SERVER['QUERY_STRING']) >= (int)$Int_QueryLength || strlen((string)$_SERVER['REQUEST_URI']) >= (int)$Int_URILength || strlen((string)$_SERVER['HTTP_USER_AGENT']) >= 255 || strstr((string)$_SERVER['QUERY_STRING'], '//') || strstr((string)$_SERVER['REQUEST_URI'], '//') || strstr((string)$_SERVER['HTTP_USER_AGENT'], '//') || strstr((string)$_SERVER['HTTP_REFERER'], '///') || strstr((string)$_SERVER['QUERY_STRING'], '\\') || strstr((string)$_SERVER['REQUEST_URI'], '\\') || strstr((string)$_SERVER['HTTP_USER_AGENT'], '\\') || strstr((string)$_SERVER['HTTP_REFERER'], '\\') || strstr((string)$_SERVER['QUERY_STRING'], '..') || strstr((string)$_SERVER['REQUEST_URI'], '..') || strstr((string)$_SERVER['HTTP_USER_AGENT'], '..') || strstr((string)$_SERVER['HTTP_REFERER'], '..') || strstr((string)$_SERVER['QUERY_STRING'], '::') ||strstr((string)$_SERVER['REQUEST_URI'], '::') || strstr((string)$_SERVER['HTTP_USER_AGENT'], '::') || strstr((string)$_SERVER['HTTP_REFERER'], '::') || strstr((string)$_SERVER['QUERY_STRING'], '~') ||strstr((string)$_SERVER['REQUEST_URI'], '~') || strstr((string)$_SERVER['HTTP_USER_AGENT'], '~') || strstr((string)$_SERVER['HTTP_REFERER'], '~') || (strtoupper($_SERVER['REQUEST_METHOD']) != 'GET' && strtoupper($_SERVER['REQUEST_METHOD']) != 'POST')) ? @exit('') : (bool)true;
> }
> برای پاکسازی HTTP header:
> 
> ...


Yousha جان اگر امکان داره در مورد این توابع توضیحی میدی!؟
تشکر

----------


## bestirani2

> Yousha جان اگر امکان داره در مورد این توابع توضیحی میدی!؟
> تشکر


یک چیزی مثل HTTP_USER_AGENT از طرف مرورگر داده میشه و این یعنی اگر ما یک برنامه بنویسیم که یکHTTP_USER_AGENT شامل کد مخرب تعریف کنیم ممکن هست هکر از این طریق اقدام به نفود بکنه که با کمک این توابع، مانع چنین کاری میشیم

----------


## bestirani2

> من یه مثال تو کتاب php5 دارم ولی وقتی که اجراش می کنم اررور می ده 
> وتا حالا هم از این نوع استفاده نکردم به خاطر همین نمی دونم مشکل کجاست 
> میشه شما نگاه کنین ببینین باید چطوری استفاده کنم؟
> ممنون
> 
> مثال:
> *فایل MyClass.PHP*
> 
> class MyClass{
> ...


MyClass کجا تعریف شد؟

----------


## thinking21

> MyClass کجا تعریف شد؟


هیچ توضیحی نداده ( داخل کتاب ) به خاطر همین نتونستم درست بفهمم .
فقط این مثال رو زده بود , فکر کنم نمی خواسته خیلی وارد این بحث بشه...
من خودم فایل MyClass.php رو تویه فولدر به نام *classes* گذاشتم ولی بازم درست نشد

----------


## bestirani2

> هیچ توضیحی نداده ( داخل کتاب ) به خاطر همین نتونستم درست بفهمم .
> فقط این مثال رو زده بود , فکر کنم نمی خواسته خیلی وارد این بحث بشه...
> من خودم فایل MyClass.php رو تویه فولدر به نام *classes* گذاشتم ولی بازم درست نشد


اگه توی *classes* قرار دادی درست هست و برای من هم کار میکنه

----------


## dispacher

برای درج عکس از بانک در صفحه باید چیکار کنم

با تشکر

----------


## omid66

> برای درج عکس از بانک در صفحه باید چیکار کنم
> 
> با تشکر


منظورت رو کلی گفتی اگه بیشتر توضیح بدی شاید بتونم کمکت کنم!!!

----------


## hamidreza66

سلام،

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

برای مدیریت تصاویر یک گالری تصاویر رو چطور ذخیره کنم؟
منظورمو با یک مثال بگم
الان وقتی یک گالری مینویسم، هر عکس بعد آپلود تغیر نام میده که با ایدی یک مطلب ممکنه مرتبط باشه و در یک فولدر ذخیره میشه 
فرضاً ای دی خبر من 6 هست و من عکس رو برای اون خبر آپلود میکنم، اسم عکس مشه: 6_1 و اگه دو عکس باشه میشه 6_2
اما فکر نمیکنم این راه درستی باشه
و اگه همه عکس ها تو یه فولدر ذخیره بشه غلطه؟
و همینطور اگه پرمیژن فولدر همیشه رو 777 باشه موردی ایجاد میشه؟

----------


## binyaft

> برای مدیریت تصاویر یک گالری تصاویر رو چطور ذخیره کنم؟


در پایگاه داده و یا در یک پوشه



> اما فکر نمیکنم این راه درستی باشه


چرا؟



> و اگه همه عکس ها تو یه فولدر ذخیره بشه غلطه؟


به نظر من نه



> و همینطور اگه پرمیژن فولدر همیشه رو 777 باشه موردی ایجاد میشه؟


اگر فقط عکس هست نه

----------


## funpatogh

شما عکسهاتو تغییر نام بده هر جوری که دوست داری میتونی حتی نامش رو با time ترکیب کنی وهمه رو اپلود کن توی یک فولدر مشکلی نداره
بعد هر مطلب یک آی دی داره و عکساتون رو که توی بانک ذخیره میکنی 3 تا فیلد بزار برای تیبل عکسهات
image_id,news_id,image_name
image_id که شماره رکورد ها هستش و auto_increment هست اما news_id رو شماره id مطلب بگزار و image_name هم نام عکسهات می باشد
مطلب هم که نمایش میدهی یک کوئری بزن و از تیبل عکسهات هز عکس که news_id برابر با id مطلبت هست نمایش بده

----------


## abdollah110110

سلام دوستان
Tip های برنامه نویسی چیست؟ 
کاربردش در PHP چگونه است؟
تشکر می کنم

----------


## funpatogh

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

----------


## pasak.org

*
* *اسکريپت دانلود و آپلود فايل در php*

*در ابتدا کدي را براي دريافت و  ارسال مستقيم فايل نوشتيم که در سمت کلاينت اجرا  ، در همين فايل موتور سرور يا دريافت کننده فايل نيز قرار دارد اين کد بصورت زير مي باشد**
**
**PHP File Upload Script
*
 <HTML>  
 <HEAD>  
 <TITLE> PHP File Upload Script </TITLE>  
 </HEAD>  
 <BODY>  
 <?php  
 if( isset($_POST['submit1'])) {  
 // $_FILES is the array auto filled when you upload a file and submit a form.  
 $userfile_name = $_FILES['file1']['name']; // file name  
 $userfile_tmp  = $_FILES['file1']['tmp_name']; // actual location  
 $userfile_size  = $_FILES['file1']['size']; // file size  
 $userfile_type  = $_FILES['file1']['type']; // mime type of file determined by php  
$userfile_error  = $_FILES['file1']['error']; // any error!. get reason here  
  
 // Content uploading.  
 $file_data = '';  
 if ( !empty($userfile_tmp))  
 {  
 // We encode the data just to make it more database friendly  
 $file_data = base64_encode(@fread(fopen($userfile_tmp, 'r'), filesize($userfile_tmp) ) );  
 }  
   
 switch (true)  
 {  
 // Check error if any  
 case ($userfile_error == UPLOAD_ERR_NO_FILE):  
 case empty($file_data):  
 echo 'You must select a document to upload before you can save this page.';  
 exit;  
 break;  
 case ($userfile_error == UPLOAD_ERR_INI_SIZE):  
 case ($userfile_error == UPLOAD_ERR_FORM_SIZE):  
 echo 'The document you have attempted to upload is too large.';  
 break;  
   
 case ($userfile_error == UPLOAD_ERR_PARTIAL):  
 echo 'An error occured while trying to recieve the file. Please try again.';  
 break;  
   
 }  
   
 if( !empty($userfile_tmp))  
 {  
 // only MS office and text file is accepted.  
 if( !(($userfile_type=="application/msword") || ($userfile_type=="text/plain")) )  
 {echo 'Your File Type is:'. $userfile_type;  
 echo '<br>File type must be text(.txt) or msword(.doc).';  
   
 exit;  
 }  
 }  
 echo filesize($userfile_tmp);  
 }  
 ?>  
   
 <form name="profile" method="POST" action="<?php echo $_SERVER['PHP_SELF'] ?>" target="_self" enctype="multipart/form-data" >  
   
 <P align ="center"><input type="hidden" name="MAX_FILE_SIZE" value="1000000">  
 <input type="file" name="file1" value="AttachFile" device="files" accept="text/*" tabindex=18 >  
   
 <input type="submit" name="submit1" value="Submit" />  
 </P>  
   
 </form>  
   
 </BODY>  
 </HTML>  *

**اين کد براي اسکريپت دانلود مي باشد :‌
PHP File Download Script



```
 <?php  
   // your file to upload  
    $file = '2007_SalaryReport.pdf';  
    header("Expires: 0");  
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");  
    header("Cache-Control: no-store, no-cache, must-revalidate");  
    header("Cache-Control: post-check=0, pre-check=0", false);  
    header("Pragma: no-cache");  
    header("Content-type: application/pdf");  
   // tell file size  
   header('Content-length: '.filesize($file));  
   // set file name  
   header('Content-disposition: attachment; filename='.basename($file));  
   readfile($file);  
   // Exit script. So that no useless data is output-ed.  
   exit;  
   ?>
```

*
*منبع : پاساک*

----------


## amir001

استفاده از or  :

$fp = fopen("fileName","XX");

if($fp == false)
die("CanNot Open File")

-----------------------------------------
$fp = fopen("fieName","XX") or die("CsnNot open File");

----------


## alireza.stack

تا بحال فکر کردید چرا بعضی موقع ها اینقدر مقدار دهی اولیه مهم میشود و بعضی ها توجه نمیکنند!
زمانی روی پروژه ای در ++C کار میکردم و به پوینتر مقدار دهی اولیه نکرده بودم و اشاره گر به جای دیگری اشاره میکرد یک هفته به خاطر مقدار دهی اولیه نکردن به آن پوینتر وقتم تلف شده و انرژی گذاشتم.
همیشه یادمان باشد که مقدار دهی اولیه به متغیرها بسیار با اهمیت و مهم است

----------


## tux-world

*رنگی کردن زمینه کلمات دلخواه در یک متن
*function highlight($sString, $aWords) {
    if (!is_array ($aWords) || empty ($aWords) || !is_string ($sString)) {
        return false;
    }
    $sWords = implode ('|', $aWords);
     return preg_replace ('@\b('.$sWords.')\b@si', '<strong style="background-color:yellow">$1</strong>', $sString);
}*
نیاز به منبع
*

----------


## tux-world

*فشرده سازی چندین فایل css و تبدیل همه آنها به یک فایل
*header('Content-type: text/css');
ob_start("compress");
function compress($buffer) {
  /* remove comments */
  $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
  /* remove tabs, spaces, newlines, etc. */
  $buffer = str_replace(array("\r\n", "\r", "\n", "\t", '  ', '    ', '    '), '', $buffer);
  return $buffer;
}

/* your css files */
include('master.css');
include('typography.css');
include('grid.css');
include('print.css');
include('handheld.css');

ob_end_flush();
نیاز به منبع

----------


## tux-world

*جلوگیری از cache شدن فایل های css و JavaScript با کمک php
*<link href="/stylesheet.css?<?php echo time(); ?>" rel="stylesheet" type="text/css" />
نیاز به منبع

----------


## amin1softco

دو روش ریدایرکت کردن صفحه که به نظرم جالبه :

اولی طرف سرور :

function redirect_to( $location = NULL ) {
        if ($location != NULL) {
            header("Location: {$location}");
            exit;
        }
    }

دومی طرف کلاینت با جاوا :

<?php
 function redirect_to( $location = NULL ) {
        if ($location != NULL) {
            echo ' <script>  
 window.location = \''.$location.'\';  
 </script> ';
        }
    }
    ?>

----------


## MMSHFE

> هیچ توضیحی نداده ( داخل کتاب ) به خاطر همین نتونستم درست بفهمم .
> فقط این مثال رو زده بود , فکر کنم نمی خواسته خیلی وارد این بحث بشه...
> من خودم فایل MyClass.php رو تویه فولدر به نام *classes* گذاشتم ولی بازم درست نشد


 دوست عزيز، توي تابع autoload__ اگه دقت كنيد، ميبينيد كه فايل با پسوند PHP (حروف بزرگ) ضميمه ميشه و شما فايل رو با پسوند php (حروف كوچك) ايجاد كردين. لطفاً به اين نكته دقت كنيد. موفق باشيد.

----------


## tux-world

حذف فایلهای قدیمی یا همون تاریخ گذشته:

function deleteoldfiles($prefix,$extension,$path){
$return=false;
if ($extension=='') $extension='*';
$files = glob("" . $path . "*.$extension",GLOB_NOSORT);
    foreach($files as $name){
    #select files with correct prefix
    if (strpos("~$name","$prefix-")>0){
        $partsofname=explode('-',$name);
        $createtime=$partsofname[1]; 
        $dif=time()-$createtime;
        if ($dif>=604800) {
            unlink( $name);
            $return=true;
        }
    }
}
return $return;    
}

----------


## tux-world

تبدیل خروجی دستور select مای اسکیوال به json در لینوکس
نام فایل:

#!/bin/sh
sed -e 's/\t/\",\"/g' \
    -e 's/^/\[\"/'    \
    -e 's/$/\"\],/'   \
    -e '1s/\(.*\)/\{\"fields\":\1\ \"data\":[/g' -e '$s/.$/\]\}/' \
| tr -d "\n"

mysql -e "SELECT * FROM foo"

+------+------+-------+
| one  | two  | three |
+------+------+-------+
|    1 |    2 |     3 |
|    4 |    5 |     6 |
+------+------+-------+
2 rows in set (0.02 sec)
طریقه استفاده :mysql -e "SELECT * FROM foo" | ./mysql_to_json.sh
خروجی:
{"fields":["one","two","three"],"data":[["1","2","3"],["4","5","6"]]}

----------


## tux-world

تبدیل خروجی مای اسکیوال به json با php:


$query = "SELECT
                id,
                message
            FROM
                message
            ORDER BY id ASC" ;
 
 
$result = mysql_query($query) or die(mysql_error());
$parent = array() ;
 
    while($row = mysql_fetch_array($result))
    {
        $parent[]         = array("id"=>$row['id'],"message"=>$row['message']);
 
 
        $query1 = "SELECT
                cid,
                cmessage,
                parent_id
            FROM
                comment
            WHERE parent_id = '$row[id]'
            ORDER BY cid ASC" ;
 
        $result1 = mysql_query($query1) or die(mysql_error());
 
        while($row1 = mysql_fetch_array($result1))
        {
            $parent[] = array("comment"=>$row1['cmessage']);
 
        }
    } 
     echo  json_encode($parent);

این هم با یک کوئری:

// Psuedo code here
$sql = 'SELECT id,message,comment FROM ...';
$rows = mysql_fetch_rows($sql);

// Real stuff
$items = array();
foreach($rows as $row)
{
  $id = $row['id'];
  if (isset($items[$id])) $item = $items[$id];
  else
  {
    $item = array
    (
      'id' => $id,
      'message' => $row['message'],
      'comments' => array()
    );
  }
  $item['comments'][] = $row['comment'];
  $items[$id] = $item;
}  

و یک تابع کامل از این نوع(حرفه‌ای)!!

function mysql2json($mysql_result,$name){
     $json="{\n\"$name\": [\n";
     $field_names = array();
     $fields = mysql_num_fields($mysql_result);
     for($x=0;$x<$fields;$x++){
          $field_name = mysql_fetch_field($mysql_result, $x);
          if($field_name){
               $field_names[$x]=$field_name->name;
          }
     }
     $rows = mysql_num_rows($mysql_result);
     for($x=0;$x<$rows;$x++){
          $row = mysql_fetch_array($mysql_result);
          $json.="{\n";
          for($y=0;$y<count($field_names);$y++) {
               $json.="\"$field_names[$y]\" :    \"$row[$y]\"";
               if($y==count($field_names)-1){
                    $json.="\n";
               }
               else{
                    $json.=",\n";
               }
          }
          if($x==$rows-1){
               $json.="\n}\n";
          }
          else{
               $json.="\n},\n";
          }
     }
     $json.="]\n};";
     return($json);
}
</span>

----------


## tux-world

تبدیل خروجی مای اسکیوال به اکسل:

<?php
	function export_excel_csv()
	{
	    $conn = mysql_connect("localhost","root","");
	    $db = mysql_select_db("database",$conn);    
	    $sql = "SELECT * FROM table";
	    $rec = mysql_query($sql) or die (mysql_error());
	    
	    $num_fields = mysql_num_fields($rec);
	    
	    for($i = 0; $i < $num_fields; $i++ )
	    {
	        $header .= mysql_field_name($rec,$i)."\\t";
	    }
	    
	    while($row = mysql_fetch_row($rec))
	    {
	        $line = '';
	        foreach($row as $value)
	        {                                            
	            if((!isset($value)) || ($value == ""))
	            {
	                $value = "\\t";
	            }
	            else
	            {
	                $value = str_replace( '"' , '""' , $value );
	                $value = '"' . $value . '"' . "\\t";
	            }
	            $line .= $value;
	        }
	        $data .= trim( $line ) . "\\n";
	    }    
	    $data = str_replace("\\r" , "" , $data);    
	    if ($data == "")
	    {
	        $data = "\\n No Record Found!\n";                        
	    }
	    
	    header("Content-type: application/octet-stream");
	    header("Content-Disposition: attachment; filename=reports.xls");
	    header("Pragma: no-cache");
	    header("Expires: 0");
	    print "$header\\n$data";
	}
	?>

----------


## tux-world

ویرایش خطی یا ویرایش در مکان با Jquery و ایجکس
خیلی ها مثل من عاشق این هستند که اطلاعات رو همون جایی که نشون داده میشه مثل دیتاگرید و شبیه اینها ویرایش کنن و با ایجکس اطلاعات رو آپدیت کنن. راهش اینه :
این فایل رو دانلود کنید
http://www.programmingfacts.com/wp-content/uploads/2010/03/jquery.jeditable.js
با این خطوط اون رو به سند اضافه کنید

<script src="jquery-1.3.2.min.js" type="text/javascript"></script>
	<script src="jquery.jeditable.js" type="text/javascript"></script>

خطی رو که میخوایید حالت ویرایش براش باز شه رو اینطوری تنظیم کنید:

<div class="edit_text" id="{id}">{value}</div>
این هم کد Jquery ایش

<script language="javascript">
	$(function() {
	  $(".edit_text").editable("save_title.php", { 
	      indicator : "<img src='indicator.gif'>",
	      submitdata: { _method: "put" },
	      select : true,
	      submit : 'Update',
	      cssclass : "editable",
	      width : "10",
	      loadtext  : 'Updating…'
	  });
	});
	</script>

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

<?php
// DATABASE CONNECTION

$id = $_POST['id'];
$value = $_POST['value'];

if($id && $value)
{
// UPDATE QUERY TO DATABASE
}
echo $value;
?>

----------


## amin1softco

در لینک زیر هم یکسری نکات نوشته شده که مفیده :
http://boplo.ir/php/php-golden-tips/

----------


## djsaeedkhan

*ضبط آدرس های درخواست شده
*$requestURI = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']';


*پاک کردن متغیر های گلوبال
*$_POST["name"] = strtolower(stripslashes(trim(htmlspecialchars($_PO  ST["name"]))));
$_POST["message"] = strtolower(stripslashes(trim(htmlspecialchars($_PO  ST["message"]))));


*درست کردن یک لوک آپ (یا مشخصات یک آی پی)
*// ip lookup from database
$ip = $row["address"];
$url = "http://api.hostip.info/get_html.php?ip=".$ip;
$contents = file_get_contents($url);
$values = split("[\n|\r]",$contents);

	$count = count($values);
	for($i = 0; $i < $count; $i++) {
		if($i != $count-1) {
			echo $values[$i] . "\n";
		}
	}


*نمایش سورس های یک آدرس (مثل ویو سورس براوزر ها)
*<?php // display source code
$lines = file('http://google.com/'); // pick teh url
foreach ($lines as $line_num => $line) { 
	// loop thru each line and prepend line numbers
	echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br>\n";
}

----------


## tux-world

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

function cln_file_name($string) {
    $cln_filename_find=array("/\.[^\.]+$/", "/[^\d\w\s-]/", "/\s\s+/", "/[-]+/", "/[_]+/");
    $cln_filename_repl=array("", ""," ", "-", "_");
    $string=preg_replace($cln_filename_find, $cln_filename_repl, $string);
    return trim($string);
}

----------


## tux-world

تابع چک کردن صحیحی بودن آدرس اینترنتی:
function validateUrl($value) {
    if(ereg("^(http|https|ftp)\://[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(:[a-zA-Z0-9]*)?/?([a-zA-Z0-9\-\._\?\,\'/\\\+&amp;%\$#\=~])*[^\.\,\)\(\s]$", $value, $regs)) {
        echo "true";
    } else {
        echo "false";
    }
}

----------


## tux-world

یک کلاس کاملا معتبر برای ارسال ایمیل بدون تشخیص اسپم توسط میل سرورها:
class MyMail{
var $To;
var $ToSender;//If you want the email to go to the sender
var $Subject;
var $Msg;
var $Headers;
var $From;
var $ReplyTo;
function MyMail($To, $Subject, $Msg, $From, $ReplyTo)
{
            $this->To=(empty($To)) ? "0" : $To;
            $this->Subject=(empty($Subject)) ? "0" : $Subject;
            $this->Msg=(empty($Msg)) ? "0" : $Msg;
            $this->From=(empty($From)) ? "0" : $From;
            $this->ReplyTo=(empty($ReplyTo)) ? "0" : $ReplyTo;
$this->Headers="MIME-Version: 1.0" . "\r\n" . "Content-type: text/html; charset=utf-8" . "\r\n" . "From:" . $this->From . "\r\n" . "Reply-To:" . $this->ReplyTo . "\r\n" . "X-Mailer: PHP/" . phpversion();
//Use this array if you want to send to only one person
$SetMail=array(
            'To'=> $this->To,
            'Subject'=> $this->Subject,
            'Msg'=> $this->Msg,
            'Headers'=> $this->Headers,
            'From'=> $this->From,
            'ReplyTo'=> $this->ReplyTo
                        );
        if(in_array("0",$SetMail))
        {
                    echo "<div align=\"left\"><font color=\"#640000\">Something wrong with the mail! Please make sure all fields are filled in!</font></div>";
                    return;
        }
        else
        {
            if(!mail($SetMail['To'], $SetMail['Subject'], $SetMail['Msg'], $SetMail['Headers']))
            {
                    echo "<script type=\"text/javascript\">window.location… is a problem with the Mail!\"</script>";
            }
        }
}
}

----------


## khanlo.javid

با سلام خدمت دوستان 


آقای یعقوبیان تو یکی از پست هاتون فرمودید از @ برای نمایش ندادن خطاها استفاده نکنیم ، راه جلوگیری از نمایش خطاها چیه ؟؟


ممنون از پاسخهاتون .

----------


## MMSHFE

تاپیک 3 سال قبل رو بالا نیارین. آقای یعقوبیان خیلی وقته که دیگه به سایت سر نمیزنن. برای همین جزو کاربران VIP شدن. تاپیک قفل شد.

----------

