یه روش نمایش زمان، مدل چند وقت پیشه که مثلا بجای فلان زمان بنویسیم: 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) { }
برچسب ها: date,function,solution
همونطور که از عنوان مشخصه، یه تابع ساده برای 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'));
برچسب ها: array,function,solution
بازگردوندن کاراکترهای ISO-Western به فارسی یا تبدیل "Ø§Ù…ÛŒØ±ØØ³ÛŒÙ†" به "امیرحسین"
امیرحسین (اینجانب) عضو تیم پشتیبانی فارسی مادایکس به آدرس http://MODxCMS.ir هستم. خیلی وقت پیش یه کرم اینترنتی پخش شد که به محتوای فایلها، کدهای تخریبی اضافه می کرد که دامن این سایت رو گرفت و ما هم اومدیم درستش کنیم زدیم جفت چشماش رو کور کردیم و محتوای کل دیتابیس بصورت Western اینکد (Encode) شد (مثلا به این شکل: "Ø§Ù…ÛŒØ±ØØ³ÛŒÙ†") و دیگه تاریخ پیوست.
تا اینکه چند وقت پیش یکی از اعضای فروم سایت زحمت کشیدند و فایلهای سایت از جمله بخش آموزش رو که قبلا ذخیره کرده بودند رو مرتب کردند، به من دادند تا توی سایت بذارم.
قصه کافیه، من یه تابع PHP نوشتم که این کاراکترها رو به فارسی برمیگردونه. این تابع، این کاراکترهای کج و کوله رو به عنوان پارامتر میگیره و فارسی روان تحویل میده.
از این که بگذریم، من در حین تست این تابع یه روش دیگه برای برگردوندن این کاراکترها پیدا کردم که راستش خیلی ساده تر از این تابع است.
کافیه یه Notepad باز کنیم و این کاراکترها رو توش کپی کنیم بعد از ذخیره، وقتی دوباره این فایل رو باز کنیم، چی میبینیم؟ فارسی!
نظرت چیه؟
برچسب ها: function,Persian,solution
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 قبلا ایجاد کرده و فرستاده جیگر!
برای حل این مشکل .......
برچسب ها: header,redirect,solution
می دونید که 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 ایجاد کرد و در صفحه قرار داد.
برچسب ها: content,include,require
توی برنامه نویسی پیش میاد که بخوایم یه سری اطلاعات فارسی رو براساس الفبای فارسی مرتب کنیم. من می دونستم که PHP با فارسی میونه خوبی نداره ولی نمی دونستم چقدر. فکر می کردم mbstring یا iconv این مشکلات رو حل کردند ولی تازه فهمیدم اشتباه فکر می کردم که PHP با فارسی (یونیکد) میونه خوبی نداره در واقع اصلا میونه ای بینشون نیست که بخواد خوب یا بد باشه!
در PHP6 ظاهرا قراره یه کارایی انجام بدن که تو سرشون بخوره! همین الان خیلی از هاستینگها حاضر نیستند PHP5 نصب کنند، PHP6 برای End-user ایرانی شیرین حواله 10 ساله دیگه است!
اخیرا به یک مبحثی در رابطه با Sort کردن سطرهای MySQL برخوردم. خواستم این مشکل رو با خود MySQL حل کنم، دیدم حدود یک میلیارد حلقه و کوئری MySQL نیاز داره تازه نیاز به تجسم این یک میلیارد عملیات داشت که از ظرفیت ذهن اینجانب خارج می باشد.
دنبال راه حل جدید میگشتم که ذهنم رفت سراغ توابع دقیق Sorting برای الفبای انگلیسی. گفتم اینا تو بلاد کفر به چه راحتی Sort می کنند خوب بیام یه جوری الفبای فارسی رو با الفبای انگلیسی متناظر کنم و ترتیب رو ازش خارج کنم (اگه متوجه شدی، زود بگو چی گفتم؟! چون خودم دقیق نفهمیدم!)
خلاصه، یه تابع به نام psort نوشتم که آرایه میگیره و براساس الفبای فارسی مرتب می کنه. به این صورت که اول اعداد فارسی، بعد حروف فارسی و بعد اعداد و حروف انگلیسی....حسن این تابع به توابع خود PHP اینه که شما می تونید ترتیب الفبا رو هر جور دوست دارید تغییر بدید مثلا همزه رو اول یا آخر الفبا قرار بدید و غیره و ذالک.
array psort($input_arr [, $function="asort"])
باقی ماجرا....
برچسب ها: array,function,Persian,psort,solution,Sort
جدیدا متوجه شدم که اگر یک کلاسی، یک کلاس دیگه رو 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 نباشند، بسته به متدهای کلاس تغییر می کنند و نمیشه با قطعیت مقدار نهایی ازشون گرفت.
برچسب ها: Object Oriented,solution
چی؟ date؟ .نه، نه، اینجا دنبال قرار ملاقات و اینجور حرکتها نباش
اینجا منظور از date، تابع ()date توی زبان PHP هست!
من با مقداری تلاش، تابع ()date رو با همه کاراکترهای فرمتش، بصورت شمسی در آوردم تا بتونید توی اسکریپتهات به زیبایی تابع date رو بر اساس تقویم جلالی استفاده کنی.
کلی توضیح و تفسیر داریم که تو دنباله مطلب بخون و همونجا داونلود کن.
برچسب ها: date,function,jdate,solution,جلالی,شمسی,مبدل تاریخ