Boplo.ir
rss


جستجو

مطالب همینجوری

 

 

بر و بچ

MyView Tween


دوستشون دارم


بیلبورد

دامین برای فروش: CleanCode.ir
FastFeed.ir
Fonvi.com

تماس


انواع و اقسام سفارشات طراحی و برنامه نویسی سایت پذیرفته میشه. از سایت حمایت از خرگوشهای صورتی گرفته تا سایت قاچاق اعضای بدن!
تماس

 

از بيماران سرطاني حمايت كنيم

A new begining
AHHP presents

 

rss پی اچ پی

دسترسی به موقعیت و Path فایل در PHP
11 شهریور 1389 ساعت 10:33

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

$baseurl = 'http://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['SCRIPT_NAME']).'/';
$basepath = str_replace('\\','/',dirname(__FILE__)).'/';
define('BASE_RELATIVE_URL',dirname($_SERVER['SCRIPT_NAME']).'/');
define('BASE_URL', $baseurl);
define('BASE_PATH', $basepath);


echo 'Base Relative Url: ' . BASE_RELATIVE_URL;
echo 'Base Url: ' . BASE_URL;
echo 'Base Path: ' . BASE_PATH;

برای نمونه، این کد رو در فایلی در Localhost با آدرس زیر قرار میدیم:
F:/Wamp/www/parent/child/test.php
همونجور که واضحه، URL این فایل به این شکل خواهد بود:
http://localhost/parent/child/test.php
در این حالت، خروجی کد بالا به این شکل خواهد بود:

/*
Base Relative Url: /parent/child/
Base Url: http://localhost/parent/child/
Base Path: F:/Wamp/www/parent/child/
*/

برچسب ها:

 

parse_url یا باحالی یک تابع
28 تير 1389 ساعت 06:57

در برنامه نويسي وب، گاهي لازم داريم که يک URL رو پردازش کنيم. مثلا از يه URL طولاني، domainاش رو بگيريم يا فقط آدرس صفحه اش رو بدست بياريم يا کوئريش رو بخونيم. براي چنين کارايي برنامه نويسهاي ناآگاه سراغ Regular Expression ميرند در حاليکه PHP عزيز براي اين کار تابع داره که با هلويي هرچه تمامتر حتي fragment يا hash آدرس رو هم ميده.

تابع parse_url در حالت استاندارد يک URL ميگيره و آرايه اي حاوي اجزاي آدرس ميده شامل اين قسمتها:

  • scheme: همون http يا https يا ftp و غيره
  • host: دامنه اصلي مثل Boplo.ir
  • port: پورت اگر باشه
  • user: همون username اگر باشه
  • pass: رمز يا password اگر ست شده باشه
  • path: مسير آدرس بعد از دامين
  • query: کوئري يعني کاراکترهاي بعد از علامت "?"
  • fragment: يا hash يا کاراکترهايي که بعد از علامت "#" ميان

براي نمونه همون مثالي که خود PHP مطرح کرده:

$url = 'http://username:password@hostname/path?arg=value#anchor';
print_r(parse_url($url));
/**
 *	Output:
 *	Array
 *	(
 *		[scheme] => http
 *		[host] => hostname
 *		[user] => username
 *		[pass] => password
 *		[path] => /path
 *		[query] => arg=value
 *		[fragment] => anchor
 *	)
 */
نکته مهم اين تابع اينه وقتي بجاي URL چرنديات تحويلش بديم، مقدار FALSE برميگردونه که ما بايد چک کنيم ولي بخاطر اينکه بيخود وقتش رو گرفتيم، يک خطاي E_WARNING هم صادر ميکنه که اگر نمايش اين دسته خطاها فعال باشه، خطا ميگيرم که مي تونيم اين مشکل رو با @ حل کنيم:
if( $url = @parse_url("chetoty googooli?") ) {
	echo "Host: " . $url['host'];
} else {
	echo "Invalid URL entered!";
}

از نسخه 5.1.2 به اين تابع يک پارامتر دوم اضافه شده که ميشه باهاش بجاي اينکه آرايه بگيريم، فقط بخش مورد نظر رو بصورت String بگيريم. مثلا اگر ميخوايم فقط کوئري آدرس رو بگيريم پارامتر دوم رو برابر PHP_URL_QUERY قرار ميديم. نمونه:

$url = "http://boplo.ir/?loveBoplo=absolutely&loveAmirHossein=dige_poroo_nasho
echo parse_url($url, PHP_URL_QUERY);
/**
 * 	Output:
 * 	loveBoplo=absolutely&loveAmirHossein=dige_poroo_nasho
 */

واسه اينکه موضوع کامل بشه، وقتي به کوئري يک تابع نياز داريم، معمولا اينکه مقدار هر کليد در اون کوئري چيه به درد ميخوره. پردازش کوئري کار خيلي ساده ايه ولي براي همون کار ساده ي چند خطي هم تابعي وجود داره به نام parse_str. مثلا براي پردازش کوئري مثال قبل، اينجوري لذت ميبريم:

$url = "http://boplo.ir/?loveBoplo=absolutely&loveAmirHossein=dige_poroo_nasho
$query = parse_url($url, PHP_URL_QUERY);
parse_str($query, $array);
print_r($array);
/**
 *	Output:
 *	Array
 *	(
 *		[loveBoplo] => absolutely
 *		[loveAmirHossein] => dige_poroo_nasho
 *	)
 */

 

از PHP لذت ببريم.

برچسب ها:

 

گرفتن مقدار فیلدهای Enum و Set در MySQL
23 تير 1389 ساعت 11:58

یکی از روشهای ذخیره اطلاعات در MySQL استفاده از لیست از قبل تعیین شده است که کنترل کنیم فقط کلمات خاصی قابل ذخیره و بازیابی باشند. مثلا جدول زیر:

CREATE TABLE boplo_categories (
	`id` INT(10) AUTO_INCREMENT PRIMARY_KEY,
	`categories` ENUM('PHP', 'Web Design', 'MODx', 'IT', 'Scratch'),
	`tags` SET('Solution', 'API', 'AJAX', 'CSS', 'Javascript')
)

در این جدول، ستون categories که از نوع ENUM تعیین شده، حتما با یکی از مقادیر مشخص شده می تونه پر بشه.
و ستون tags که از نوع SET ایجاد شده مانند ENUM عمل می کنه با این تفاوت که در این ستون میشه بیشتر از یکی از موارد لیست رو ثبت کرد مثلا هم CSS و هم Solution ولی ENUM فقط یک مقدار میتونه داشته باشه.

کار با ENUM و SET خیلی لذتبخشه غیر از موقعی که بخوایم لیستی که در ENUM یا SET مشخص شده رو در برنامه امون داشته باشیم. معمولترین کاردبردش ساختن <SELECT> براساس مقادیر مشخص شده است. برای اینکار باید ابتدا لیست مقادیری که بصورت ENUM یا SET مشخص شده رو توسط یک کوئری بدست بیاریم و سپس کلمات لیست رو از این مقدار خارج کنیم. در ادامه پست میخوایم لیست کلمات مشخص شده برای ستون categories که بالا قرار دادم رو بدست بیاریم.

برچسب ها: ,,

 

نحوه کار با فرمها در PHP. یکبار برای همیشه!
29 اردیبهشت 1389 ساعت 01:47

سر و کله زدن با فرم در PHP از اون مبحثهایی هست که زیاد درباره اش سوال پیش میاد مخصوصا برای کاربران تازه کار. توی این مقاله میخوایم همه سوراخ سمبه های فرمها رو با PHP کشف کنیم. انواع فیلد و ورودی رو معرفی می کنم و شیوه دسترسی به مقدارشون در PHP رو هم توضیح میدم.

فرم زیر رو ببین. این فرم همه جور فیلد و ورودی به دردبخور رو به انواع مختلف داره. میخوایم در ادامه مقاله، این فرم رو در PHP پردازش کنیم.

<form action="submit.php" method="POST" enctype="multipart/form-data">
	
	<input type="text" name="field_text" value="" />
	<input type="password" name="field_password" value="" />
	<textarea name="textarea"></textarea>
	<input type="submit" name="button_submit" value="Submit Form" />
	<select name="select_single">
		<option value="option 1">Opt1</option>
		<option value="option 2">Opt2</option>
		<option value="option 3">Opt3</option>
		<option value="option 4">Opt4</option>
	</select>
	<input type="hidden" name="field_hidden" value="some hidden data" />
	
	
	<input type="checkbox" name="field_checkbox_single" value="checkbox single value" />
	<input type="radio" name="field_radio" value="radio value 1" />
	<input type="radio" name="field_radio" value="radio value 2" />
	<input type="radio" name="field_radio" value="radio value 3" />
	
	
	
	
	<input type="checkbox" name="field_checkbox_multiple[]" value="checkbox multiple value 1" />
	<input type="checkbox" name="field_checkbox_multiple[]" value="checkbox multiple value 2" />
	<input type="checkbox" name="field_checkbox_multiple[]" value="checkbox multiple value 3" />
	
	<input type="checkbox" name="chkbx_multiple_with_key[parent]" value="chkbx mltpl with key1" />
	<input type="checkbox" name="chkbx_multiple_with_key[parent]" value="chkbx mltpl with key2" />
	
	<select name="select_mulitple[]" multiple="multiple">
		<option value="option 1">Opt1</option>
		<option value="option 2">Opt2</option>
		<option value="option 3">Opt3</option>
		<option value="option 4">Opt4</option>
	</select>
	
	<input type="file" name="field_file" MAX_FILE_SIZE="2000000" />
	<input type="file" name="field_file_multiple[]" MAX_FILE_SIZE="2000000" />
	<input type="file" name="field_file_multiple[]" MAX_FILE_SIZE="2000000" />
	
	<input type="reset" name="field_reset" value="Reset" />
	<input type="image" name="field_img" value="Image" />
	<input type="button" name="field_button" value="Button To Click" />

</form>

برچسب ها:

 

تبدیل تاریخ مورد نظر به فرمت چند وقت پیش
21 بهمن 1388 ساعت 01:08

یه روش نمایش زمان، مدل چند وقت پیشه که مثلا بجای فلان زمان بنویسیم: 23 روز و 19 ساعت و 45 دقیقه پیش.

تابع زیر همین کار رو می کنه. تاریخ Timestamp میگیره و مدل "چند وقت پیش" تحویل میده. میشه توسط پارامترهاش تعیین کنیم که از سال تا ثانیه چه واحدهایی رو نمایش بده. یعنی مثلا سال و ماه و روز رو فقط نشون بده یا مثلا دقیقه و ثانیه رو نمایش نده و ....

نمونه:

$time = time() - 15*60;
echo getPastTime($time);
خروجی این خواهد بود: 15 دقیقه پیش

/**
 * getPastTime : Get Past Time in String
 * 
 * 
 * Author : AHHP(Amir Hossein Hodjaty Pour) ~ Boplo@Boplo.ir
 * License : GPL
 * Version : 1
 * Created on : 1388/11/20     11:55 pm
 * 
 * @param integer $time Unix Timestamp to parse
 * @param bool $year Set to FALSE to remove Year from output. optional default to TRUE.
 * @param bool $month Set to FALSE to remove Month from output. optional default to TRUE.
 * @param bool $day Set to FALSE to remove Day from output. optional default to TRUE.
 * @param bool $hour Set to FALSE to remove Hour from output. optional default to TRUE.
 * @param bool $minute Set to FALSE to remove Minute from output. optional default to TRUE.
 * @param bool $second Set to TRUE to remove Second from output. optional default to FALSE.
 * @return string Formatted string
 */

function getPastTime($time, $year=true, $month=true, $day=true, $hour=true, $minute=true, $second=false) { }

Download getPastTime.function.zip

برچسب ها: ,,

 

تابع array_inject
01 بهمن 1388 ساعت 03:05

همونطور که از عنوان مشخصه، یه تابع ساده برای inject یا تزریق مقدار در یک آرایه.

/**
 * Injects input to array
 *
 * @param array $array Original array
 * @param integer $index Index to inject into
 * @param mixed $input Mixed input to be injected
 * @return array New array
*/
function array_inject($array, $index, $input) {
	$start = array_slice($array, 0, $index);
	$inject = is_array($input) ? $input : array($input);
	$end = array_slice($array, $index);
	
	return array_merge($start, $inject, $end);
}

// Example
print_r(array_inject($arr, 2, $arr));
print_r(array_inject($arr, 2, 'an input'));

Download array_inject.function.zip

برچسب ها: ,,

 

بازگردوندن کاراکترهای ISO-Western به فارسی
18 دى 1388 ساعت 01:06

بازگردوندن کاراکترهای ISO-Western به فارسی یا تبدیل "امیرحسین" به "امیرحسین"

امیرحسین (اینجانب) عضو تیم پشتیبانی فارسی مادایکس به آدرس http://MODxCMS.ir هستم. خیلی وقت پیش یه کرم اینترنتی پخش شد که به محتوای فایلها، کدهای تخریبی اضافه می کرد که دامن این سایت رو گرفت و ما هم اومدیم درستش کنیم زدیم جفت چشماش رو کور کردیم و محتوای کل دیتابیس بصورت Western اینکد (Encode) شد (مثلا به این شکل: "امیرحسین") و دیگه تاریخ پیوست.
تا اینکه چند وقت پیش یکی از اعضای فروم سایت زحمت کشیدند و فایلهای سایت از جمله بخش آموزش رو که قبلا ذخیره کرده بودند رو مرتب کردند، به من دادند تا توی سایت بذارم.

قصه کافیه، من یه تابع PHP نوشتم که این کاراکترها رو به فارسی برمیگردونه. این تابع، این کاراکترهای کج و کوله رو به عنوان پارامتر میگیره و فارسی روان تحویل میده.

از این که بگذریم، من در حین تست این تابع یه روش دیگه برای برگردوندن این کاراکترها پیدا کردم که راستش خیلی ساده تر از این تابع است.
کافیه یه Notepad باز کنیم و این کاراکترها رو توش کپی کنیم بعد از ذخیره، وقتی دوباره این فایل رو باز کنیم، چی میبینیم؟ فارسی!
نظرت چیه؟

Persian sort function

برچسب ها: ,,

 

گرفتن محتوای فایل include شده
08 مرداد 1388 ساعت 08:13

می دونید که include کردن یه فایل، درست مثل کپی کردن محتویات اون فایله.
این مدل یه مشکل کوچیک داره و اون اینه که این تابع خروجی رو return نمی کنه که بشه توی یک متغیر قرارش داد.

مثلا میخوایم کدهای جاوااسکریپت رو با PHP ایجاد کنیم. تو این حالت یک فایل php میسازیم و کدهای JS رو توش قرار میدیم و بخشهایی که لازمه رو با php تعیین می کنیم.
اگر محتویات این فایل رو مستقیم چاپ کنیم، کدهای php هم مستقیما بصورت text-plain چاپ میشن. اگر این فایل رو include کنیم، همون نقطه از فایل چاپ میشه.

با روش زیر هم کدهایی PHP رو اجرا می کنیم و هم محتویات رو توی یک متغیر میریزیم:

ob_start();
include "js.php";
$jsCodes = ob_get_contents();
ob_end_clean();

به همین زیبایی می تونید یک سری کد JS داینامیک رو از یه فایل جداگانه بگیرید! البته این یک مثال بود. میشه به سادگی فایل جاوااسکریپت رو توسط فایل PHP ایجاد کرد و در صفحه قرار داد.

برچسب ها: ,,

 

Cannot modify header و زهرمار
25 تير 1388 ساعت 11:29

PHP یه بخشی داره به نام HTTP Header که این بخش به بیماری سرطان مبتلاست و متاسفانه درد این سرطانش دامن کاربرها رو میگیره.
جریان از این قراره که هر سند PHP با یک سری Header شروع میشه که شامل اطلاعات اساسی اون سند یا پرونده است از جمله فرمت یا نوع مثل text/html یا image/jpeg یا ....
وقتی کاربر headerی رو تعیین می کنه یا اطلاعاتی رو چاپ می کنه، اطلاعات Header به بافر ارسال میشه و تا به کلاینت یا بازدیدکننده فرستاده شه.
مشکل زمانی بوجود میاد که ما بخوایم بعد از ارسال خروجی به بافر، header جدید تعیین کنیم که در اون صورت با error معروف زیر مواجه میشیم:

Warning: Cannot modify header information - headers already sent by
(output started at /.../sent.php:1) in /.../current.php on line 10

که میگه: داری تو خط 10 فایل current.php یه header ایجاد می کنی در حالیکه فایل sent.php قبلا ایجاد کرده و فرستاده جیگر! منگ
برای حل این مشکل .......

برچسب ها: ,,

 

Sorting همیشه فارسی - تابع Persian Sort
29 اردیبهشت 1388 ساعت 02:44

توی برنامه نویسی پیش میاد که بخوایم یه سری اطلاعات فارسی رو براساس الفبای فارسی مرتب کنیم. من می دونستم که PHP با فارسی میونه خوبی نداره ولی نمی دونستم چقدر. فکر می کردم mbstring یا iconv این مشکلات رو حل کردند ولی تازه فهمیدم اشتباه فکر می کردم که PHP با فارسی (یونیکد) میونه خوبی نداره در واقع اصلا میونه ای بینشون نیست که بخواد خوب یا بد باشه!
در PHP6 ظاهرا قراره یه کارایی انجام بدن که تو سرشون بخوره! همین الان خیلی از هاستینگها حاضر نیستند PHP5 نصب کنند، PHP6 برای End-user ایرانی شیرین حواله 10 ساله دیگه است!

اخیرا به یک مبحثی در رابطه با Sort کردن سطرهای MySQL برخوردم. خواستم این مشکل رو با خود MySQL حل کنم، دیدم حدود یک میلیارد حلقه و کوئری MySQL نیاز داره تازه نیاز به تجسم این یک میلیارد عملیات داشت که از ظرفیت ذهن اینجانب خارج می باشد.
دنبال راه حل جدید میگشتم که ذهنم رفت سراغ توابع دقیق Sorting برای الفبای انگلیسی. گفتم اینا تو بلاد کفر به چه راحتی Sort می کنند خوب بیام یه جوری الفبای فارسی رو با الفبای انگلیسی متناظر کنم و ترتیب رو ازش خارج کنم (اگه متوجه شدی، زود بگو چی گفتم؟! چون خودم دقیق نفهمیدم!)

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

array psort($input_arr [, $function="asort"])
Persian sort function
باقی ماجرا....

برچسب ها: ,,,,,

 

دریافت member-variable از کلاس والد....
10 اردیبهشت 1388 ساعت 12:54

جدیدا متوجه شدم که اگر یک کلاسی، یک کلاس دیگه رو extend کنه، نمی تونه Propertyهای کلاس والد که static نیستند رو مستقیما بگیره. یعنی اینجوری جواب نمیده:

class childClass extends parentClass {
	.....
	$a = parent::memberVariable;
	.....
}

توی اینترنت گشتم چیزی جالبی پیدا نکردم ولی خودم یه روش باحال کشف کردم. برای گرفتن Property کلاس والد میشه یک متد توی کلاس والد ایجاد کرد که بیاد Property رو return کنه. مثل این:

class parentClass {
	.....
	function getProperty($property)
	{
		return $this->$property;
	}
	.....
}

حالا توی کلاس پایین دستی میتونید هر مشخصه ای رو از کلاس والد بگیرید (البته با مقدار کنونی)

class childClass extends parentClass {
	.....
	$a = parent::getProperty("memberVariable");
	// $a equals to parent::memberVariable
	.....
}
دلیل اینکه چنین قابلیتی تعریف نشده کاملا مشخصه. Propertyهای یک کلاس اگر static نباشند، بسته به متدهای کلاس تغییر می کنند و نمیشه با قطعیت مقدار نهایی ازشون گرفت.

برچسب ها: ,

 

مبدل شمسی تابع date
25 اسفند 1387 ساعت 02:57

چی؟ date؟ .نه، نه، اینجا دنبال قرار ملاقات و اینجور حرکتها نباش اینجا منظور از date، تابع ()date توی زبان PHP هست!

من با مقداری تلاش، تابع ()date رو با همه کاراکترهای فرمتش، بصورت شمسی در آوردم تا بتونید توی اسکریپتهات به زیبایی تابع date رو بر اساس تقویم جلالی استفاده کنی.

کلی توضیح و تفسیر داریم که تو دنباله مطلب بخون و همونجا داونلود کن.

برچسب ها: ,,,,,,

 

1

 

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

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

به خونه امیرحسین خوش اومدی...

MODx | Template World