PDA

View Full Version : گفتگو: Tip های برنامه نویسی



yaqubian
یک شنبه 24 آذر 1387, 12:54 عصر
با سلام خدمت تمام دوستان خودم در این تالار
لطفا کلیه نکاتی که به نظرتون جالب می رسه و شاید کمتر کسی اونا رو دیده باشه یعنی همون tip های برنامه نویسی رو در این تاپیک قرار بدید.
لطفا از ارسال هر گونه پست اضافی جدا خودداری نمایید.
موفق باشید

امید امرایی
یک شنبه 24 آذر 1387, 14:13 عصر
دسترسی به Registry در ویندوز :



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

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

Shell->RegRead($key);

$Shell->RegDelete($key);


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

Yousha
یک شنبه 24 آذر 1387, 16:39 عصر
نکات و اصول مهم در برنامه نویسی(1#) (http://barnamenevis.org/forum/showthread.php?p=621203#post621203)

نکات و اصول مهم در برنامه نویسی(2#) (http://barnamenevis.org/forum/showthread.php?p=629327#post629327)

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

yaqubian
پنج شنبه 12 دی 1387, 23:25 عصر
/**
* 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
پنج شنبه 12 دی 1387, 23:44 عصر
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
پنج شنبه 12 دی 1387, 23:57 عصر
کار این مود mod_deflate چیه

yaqubian
جمعه 13 دی 1387, 00:15 صبح
دوست عزیز
کارش comprerss کردن! یه چیزی شبیه gzip!
موفق باشید

Yousha
جمعه 18 بهمن 1387, 13:15 عصر
برای چک/صحت 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
دوشنبه 28 بهمن 1387, 20:03 عصر
دوستان عزیز
اینم چند تا نکته واسه بالا بردن performance !
http://atomized.org/2005/04/php-performance-best-practices/
موفق باشید

smhnaji
سه شنبه 29 بهمن 1387, 01:48 صبح
40 Tips for optimizing your php code (http://reinholdweber.com/?p=3)

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

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

amirhosein
پنج شنبه 08 اسفند 1387, 20:44 عصر
بجاي دابل كوتيشن بهتره كه حتي المقدور از تك كوتيشن استفاده بشه چون پردازشي روش صورت نميگيره.

Yousha
سه شنبه 13 اسفند 1387, 14:21 عصر
نکات و اصول مهم در برنامه نویسی(3#) (http://barnamenevis.org/forum/showthread.php?t=150262)

Mohammadrezag
دوشنبه 07 اردیبهشت 1388, 19:12 عصر
دوست عزيز واقعا گل كاشتي ، تاپيك بسيار خوبيه ! ممنون
كاش بعضي از نكاتي كه مي گي رو يه ريزه بيشتر توضيح بدي مثلا دليل اين چيه ؟
و چه راهكاري داره ؟
ممنونم رفيق


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

Yousha
چهارشنبه 09 اردیبهشت 1388, 13:28 عصر
سلام،


کار این مود 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
پنج شنبه 10 اردیبهشت 1388, 08:13 صبح
مثلاً: require('c:/www/root/xxxxx.php');[/quote]


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

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

hosseintdk775
پنج شنبه 10 اردیبهشت 1388, 12:44 عصر
مثلاً: require('c:/www/root/xxxxx.php');



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

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

Jason.Bourne
جمعه 11 اردیبهشت 1388, 10:56 صبح
7- استفاده از مسیرهای کامل تو include یا require ها زمان کمتری رو صرف می کنه تا اینکه بخوایم اونا resolve کنیم به وسیله مسیرهای OS.

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

مثلا مسیردهی زیر کدام روش است؟ به مسیر سیستم عامل یا مسیر کامل؟


require('c:/www/root/xxxxx.php');

alihoseini
پنج شنبه 26 شهریور 1388, 11:19 صبح
من متوجه جمله بالا نشدم که مسیر کامل چی هست و resolve کردن به وسیله مسیرهای OS چی هست.

مثلا مسیردهی زیر کدام روش است؟ به مسیر سیستم عامل یا مسیر کامل؟


require('c:/www/root/xxxxx.php');


اين آدرس دهي بيشتر حالت لينوكسي هستش ولي تو وينوز هم درست كار ميكنه اما اگه بصورت ويندوزي آدرس بدين تو لينوكس كار نميكنه مثل :

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

yasercomeng
پنج شنبه 26 شهریور 1388, 17:46 عصر
نحوه دستكاري تاريخ و انواع نمايش تاريخ:



<?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 (http://www.phpbuilder.com)

yasercomeng
شنبه 04 مهر 1388, 15:07 عصر
كدي براي حذف كليه دايركتوري ها و فايل هاي درون آن:



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
شنبه 04 مهر 1388, 15:12 عصر
تعيين نوع مرورگر:



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

}

اوبالیت به بو
شنبه 09 آبان 1388, 14:58 عصر
Mime type in php:



http://www.php.net/manual/en/function.mime-content-type.php

Reza1607
چهارشنبه 28 بهمن 1388, 10:52 صبح
6- تا جایی که ممکنه از require_once استفاده نکنیم!

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


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


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

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

taknegaar
سه شنبه 17 فروردین 1389, 14:21 عصر
میشه توضیح بدید که باید برای چی از 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
پنج شنبه 09 اردیبهشت 1389, 18:49 عصر
كدي براي حذف كليه دايركتوري ها و فايل هاي درون آن:



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);
}

}







بدون شرح!





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

Reza1607
چهارشنبه 09 تیر 1389, 10:08 صبح
یه سری هم به لینک زیر بزنید چند کد خوب گذاشتم
http://barnamenevis.org/forum/showthread.php?t=215150

bestirani2
شنبه 19 تیر 1389, 18:03 عصر
5- حتی الامکان از این دستورات استفاده نکنین get__ و set__ و autoload__
ادامه دارد ...
دلیلتون برای استفاده نکردن از autoload__ چی هست؟
به نظرم من استفاده از این باعث میشه مدریت فایل ها راحت تر بشه و بدلیل اینکه فایلی که گنجانده میشه کمتر هست، حجم برنامه هم کاهش میابد

zerocool.3830
دوشنبه 04 مرداد 1389, 17:03 عصر
سلام . چرا از Require_once نباید استفاده کرد ؟:متفکر:

eshpilen
چهارشنبه 13 مرداد 1389, 20:15 عصر
بنظرم یک مطلب کاملا غلط در اینجا بیان شده.
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() (file:///E:/misc/php_manual_en/html/function.require-once.html) 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
چهارشنبه 13 مرداد 1389, 20:24 عصر
یک مورد دیگه هم که بیان شده تشویق به استفاده از آدرس دهی مطلق برای اینکلود کردن هست، که باید بگم بنظر من اینمورد هم یک توصیهء کاملا غلطه.
درسته که سرعت اجرا در این حالت شاید بالا بره، اما این مقدار افزایش سرعت عملا خیلی ناچیز هست، و درمقابل ما داریم با اینکار از اصول برنامه نویسی صحیح خارج میشیم. چون برنامهء ما به مسیرهای از پیش تعریف شده وابسته میشه، درحالیکه ما همیشه باید از اینطور چیزها پرهیز کنیم و برنامه هرچه ساده تر و منعطف تر باشه. هرچند شاید بشه روشی برای تخفیف یا برطرف کردن این ضعف پیدا کرد، اما افزایش سرعت ما اونقدر ناچیزه و در تقریبا تمام کاربردها بی ارزش، که فکر نمیکنم ارزش امتحان کردن رو هم داشته باشه. اینکار برنامهء ما رو پیچیده تر میکنه.
یک مزیت برنامه نویسی مدرن و زبانهای مدرن همین چیزهاست و اگر ما بخوایم بخاطر کوچکترین افزایش سرعت، قابلیت هایی مثل خوانایی و انعطاف و سادگی و حجم کمتر رو فدا کنیم، اصلا منطقی نیست.
سیستمی که بخواد اونقدر محدودیت منابع یا بار مفرط داشته باشه که چنین چیزهایی بخواد کمکی بهش بکنه و برنامهء ما رو از غیرقابل استفاده به قابل استفاده تبدیل بکنه، بیشتر در خیال وجود داره تا واقعیت. و بهینه سازی در عرصه هایی صورت میگیره که بیشترین تاثیر رو داشته باشن و واقعا مورد نیاز باشن، نه در یک چنین چیزهای جزیی که جزو ساده ترین امکانات پایه ای برای برنامه نویسی اصولی و راحت و سریع هستن.
خلاصه بازم میتونم کلی توضیح بدم که چرا این استدلالها و توصیه ها غلط هست، ولی فکر میکنم خودتون فهمیده باشید و بتونید روش استدلال رو ادامه و تعمیم بدید و به مزایا و معایب دیگه برسید. اگر بازم ابهامی بود بگید تا روش بحث کنیم. البته بنده از اینطور اظهار نظرها و توصیه ها زیاد و جاهای دیگه هم دیدم که بنظرم باید براش فکری بشه؛ شاید باید یک تاپیک برای بحث در اینمورد بزنیم!

thinking21
شنبه 23 مرداد 1389, 07:53 صبح
دلیلتون برای استفاده نکردن از autoload__ چی هست؟
به نظرم من استفاده از این باعث میشه مدریت فایل ها راحت تر بشه و بدلیل اینکه فایلی که گنجانده میشه کمتر هست، حجم برنامه هم کاهش میابد
سلام (من با این مشکل دارم)
می شه در مورد ( autoload__ )توضییح بدین با مثال ..




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





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

bestirani2
دوشنبه 25 مرداد 1389, 13:11 عصر
سلام (من با این مشکل دارم)
می شه در مورد ( autoload__ )توضییح بدین با مثال ..
متشکر.
وقتی یک یک نمونه شی از یک کلاس که توی صفحه وجود ندارد ایجاد میکنیم، در صورتی که از autoload__استفاده کنیم، قبل از اینکه با پیغام خطا مواجه بشیم، این تابع اجرا می شود که میتوان در آن، فایل مربوط به آن کلاس را اینکلود کرد

thinking21
چهارشنبه 27 مرداد 1389, 17:47 عصر
وقتی یک یک نمونه شی از یک کلاس که توی صفحه وجود ندارد ایجاد میکنیم، در صورتی که از 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
پنج شنبه 28 مرداد 1389, 17:47 عصر
برای چک/صحت 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);
}
موفق باشید.

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

bestirani2
شنبه 30 مرداد 1389, 18:06 عصر
Yousha جان اگر امکان داره در مورد این توابع توضیحی میدی!؟
تشکر
یک چیزی مثل HTTP_USER_AGENT از طرف مرورگر داده میشه و این یعنی اگر ما یک برنامه بنویسیم که یک HTTP_USER_AGENT شامل کد مخرب تعریف کنیم ممکن هست هکر از این طریق اقدام به نفود بکنه که با کمک این توابع، مانع چنین کاری میشیم

bestirani2
شنبه 30 مرداد 1389, 18:08 عصر
من یه مثال تو کتاب 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();


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

thinking21
شنبه 30 مرداد 1389, 19:39 عصر
MyClass کجا تعریف شد؟

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

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

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

dispacher
یک شنبه 28 شهریور 1389, 10:45 صبح
برای درج عکس از بانک در صفحه باید چیکار کنم

با تشکر

omid66
پنج شنبه 01 مهر 1389, 14:14 عصر
برای درج عکس از بانک در صفحه باید چیکار کنم

با تشکر

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

hamidreza66
چهارشنبه 14 مهر 1389, 20:18 عصر
سلام،

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

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

binyaft
پنج شنبه 22 مهر 1389, 15:49 عصر
برای مدیریت تصاویر یک گالری تصاویر رو چطور ذخیره کنم؟
در پایگاه داده و یا در یک پوشه

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

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

و همینطور اگه پرمیژن فولدر همیشه رو 777 باشه موردی ایجاد میشه؟
اگر فقط عکس هست نه

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

abdollah110110
دوشنبه 10 آبان 1389, 17:58 عصر
سلام دوستان
Tip های برنامه نویسی چیست؟
کاربردش در PHP چگونه است؟
تشکر می کنم

funpatogh
دوشنبه 10 آبان 1389, 21:13 عصر
شامل الگوریتم ها و نمونه کد های نایاب و ترفند های جالب برای بهینه تر شدن برنامه شما و ... می باشد

pasak.org
چهارشنبه 22 دی 1389, 11:44 صبح
اسکريپت دانلود و آپلود فايل در php (http://pasak.org/showproduct.php?id=228)

در ابتدا کدي را براي دريافت و ارسال مستقيم فايل نوشتيم که در سمت کلاينت اجرا ، در همين فايل موتور سرور يا دريافت کننده فايل نيز قرار دارد اين کد بصورت زير مي باشد

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;
?>


منبع : پاساک (http://pasak.org/)

amir001
یک شنبه 10 بهمن 1389, 17:24 عصر
استفاده از or :


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

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

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

alireza.stack
شنبه 07 اسفند 1389, 14:50 عصر
تا بحال فکر کردید چرا بعضی موقع ها اینقدر مقدار دهی اولیه مهم میشود و بعضی ها توجه نمیکنند!
زمانی روی پروژه ای در ++C کار میکردم و به پوینتر مقدار دهی اولیه نکرده بودم و اشاره گر به جای دیگری اشاره میکرد یک هفته به خاطر مقدار دهی اولیه نکردن به آن پوینتر وقتم تلف شده و انرژی گذاشتم.
همیشه یادمان باشد که مقدار دهی اولیه به متغیرها بسیار با اهمیت و مهم است

tux-world
یک شنبه 08 اسفند 1389, 23:25 عصر
رنگی کردن زمینه کلمات دلخواه در یک متن

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
یک شنبه 08 اسفند 1389, 23:26 عصر
فشرده سازی چندین فایل 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
یک شنبه 08 اسفند 1389, 23:28 عصر
جلوگیری از cache شدن فایل های css و JavaScript با کمک php

<link href="/stylesheet.css?<?php echo time(); ?>" rel="stylesheet" type="text/css" />
نیاز به منبع

amin1softco
چهارشنبه 26 مرداد 1390, 12:37 عصر
دو روش ریدایرکت کردن صفحه که به نظرم جالبه :

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


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
شنبه 19 شهریور 1390, 10:18 صبح
هیچ توضیحی نداده ( داخل کتاب ) به خاطر همین نتونستم درست بفهمم .
فقط این مثال رو زده بود , فکر کنم نمی خواسته خیلی وارد این بحث بشه...
من خودم فایل MyClass.php رو تویه فولدر به نام classes گذاشتم ولی بازم درست نشد

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

tux-world
شنبه 09 مهر 1390, 10:06 صبح
حذف فایلهای قدیمی یا همون تاریخ گذشته:


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
شنبه 09 مهر 1390, 10:17 صبح
تبدیل خروجی دستور 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
شنبه 09 مهر 1390, 11:20 صبح
تبدیل خروجی مای اسکیوال به 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
شنبه 09 مهر 1390, 11:26 صبح
تبدیل خروجی مای اسکیوال به اکسل:


<?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
شنبه 09 مهر 1390, 11:46 صبح
ویرایش خطی یا ویرایش در مکان با Jquery و ایجکس
خیلی ها مثل من عاشق این هستند که اطلاعات رو همون جایی که نشون داده میشه مثل دیتاگرید و شبیه اینها ویرایش کنن و با ایجکس اطلاعات رو آپدیت کنن. راهش اینه :
این فایل رو دانلود کنید

http://www.programmingfacts.com/wp-content/uploads/2010/03/jquery.jeditable.js
با این خطوط اون رو به سند اضافه کنید

<script src="jquery-1.3.2.min.js" type="text/javascript (http://www.programmingfacts.com/maximum-charactorswords-limitcounter/)"></script>
<script src="jquery.jeditable.js" type="text/javascript (http://www.programmingfacts.com/maximum-charactorswords-limitcounter/)"></script>

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


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

<script language="javascript (http://www.programmingfacts.com/maximum-charactorswords-limitcounter/)">
$(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
دوشنبه 11 مهر 1390, 14:40 عصر
در لینک زیر هم یکسری نکات نوشته شده که مفیده :
http://boplo.ir/php/php-golden-tips/

djsaeedkhan
پنج شنبه 22 دی 1390, 17:58 عصر
ضبط آدرس های درخواست شده

$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
شنبه 24 دی 1390, 23:40 عصر
چک و پاک کردن عبارتهای اضافی نام فایلها:
همانظور که میدانید ما برای اسکیوال انجکشن توابع زیادی داریم تا به نفوذ کننده تا جای ممکن اجازه ندیم از کدهای مخرب استفاده کنه. این تابعی که ازش استفاده میکنم کدهای مخرب یا اضافی رو پاک میکنه


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
یک شنبه 25 دی 1390, 21:49 عصر
تابع چک کردن صحیحی بودن آدرس اینترنتی:

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
یک شنبه 25 دی 1390, 21:57 عصر
یک کلاس کاملا معتبر برای ارسال ایمیل بدون تشخیص اسپم توسط میل سرورها:

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
سه شنبه 28 بهمن 1393, 09:27 صبح
با سلام خدمت دوستان


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


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

MMSHFE
چهارشنبه 29 بهمن 1393, 08:51 صبح
تاپیک 3 سال قبل رو بالا نیارین. آقای یعقوبیان خیلی وقته که دیگه به سایت سر نمیزنن. برای همین جزو کاربران VIP شدن. تاپیک قفل شد.