در صورتی که بر روی سرور فایل فشرده در فرمت های zip ، gzip و سایر فرمت ها را دارید می توانید توسط PHP فایل را اکستراکت نمایید. برای انجام این کار می توانید از کد نمونه PHP زیر که توسط سایت رسمی PHP منتشر شده و در آدرس http://www.php.net/manual/en/ziparchive.extractto.php آمده استفاده نمایید.
$zip = new ZipArchive;
if ($zip->open("test.zip") === TRUE) {
$zip->extractTo("/my/destination/dir/");
$zip->close();
echo "ok";
} else {
echo "failed";
}
?>
در صورتی که حجم فایل فشرده شما زیاد می باشد می بایست از تابع زیر برای افزایش زمان اجرای برنامه PHP استفاده نمایید.
برای انجام این کار کافی است تابع را در بالای کد کپی نمایید.
همچنین تابع آماده برای خارج سازی فایل ها از حالت فشرده در آدرس http://themergency.com/extract-zip-files-with-php/ وجود دارد که کافی است فایل unzip.php را بر روی سرور خود بارگذاری نموده و آدرس آن را در مرورگر رویت نمایید. فایل مورد نظر کلیه فایل های موجود در سرور را به شما نمایش می دهد و کافی است بر روی فایل فشرده خود کلیک نموده تا فایل اکستراکت گردد.
آدرس:
اکستراکت نمودن فایل های فشرده توسط PHP
در برنامه نویسی PHP مواقعی پیش می آید که نیاز دارید دو تاریخ را به یکدیگر مقایسه نمایید و فاصله زمانی بین دو تاریخ را پیدا کنید که در بخش زیر نحوه بدست آوردن آن را به صورت کامل برای شما شرح خواهم داد. تاریخ ها را نمی توانید به صورت عادی از هم منها نمایید و می بایست آنها را به مقدار عددی تبدیل نمایید. برای انجام این کار می توانید از تابع strtotime استفاده نمایید. این تابع تاریخ شما به صورت تاریخ UNIX تبدیل می نماید که این تاریخ فاصله زمان تاریخ شما به ثانیه از زمان یکم 1970 می باشد. در زیر نحوه انجام این کار را به شما نمایش می دهم:
$date1 = "2007-03-24 00:00:00";
$date2 = "2009-06-26 00:00:00";
$diff = abs(strtotime($date2) - strtotime($date1));
$years = floor($diff / (365*60*60*24));
$months = floor(($diff - $years * 365*60*60*24) / (30*60*60*24));
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24));
printf("%d years, %d months, %d days\n", $years, $months, $days);
در کد بالا تاریخ می توانید به صورت تاریخ و زمان نیز باشد. متغییر $diff دو تاریخ را به صورت عددی از یکدیگر منها می نماید و بنابراین $date2 می بایست زمان جدیدتر باشد. برای بدست آوردن تفاوت سالیانه دو تاریخ می بایست فاصله زمانی بدست آماده را به سال تبدیل نمایید و از تابع floor برای روند کردن آن استفاده نمایید. برای بدست آوردن تعداد ماه ابتدا می بایست تعداد سال ها به ثانیه را از تفاوت دو تاریخ به ثانیه کسر نموده و سپس آن را به ماه تبدیل نمایید و برای سایر واحدهای تاریخ نیز به همین ترتیب عمل نمایید. در صورتی که قصد دارید فاصله بین دو تاریخ را به ساعت و دقیقه و همچنین ثانیه بیان نمایید می توانید کدهای زیر را به کد اصلی خود اضافه نمایید.
$hour = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24)/ (60*24));
$min = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24 - $days*60*60*24 - $hour*60*60)/ (60));
البته می توانید فاصله زمانی بین دو تاریخ را فقط توسط المان های دیگر نظیر ساعت و دقیقه بیان نمایید که در زیر مثال آن را برای شما آورده ام:
$hour = floor($diff / (60*24));
$min = floor(($diff - $hour * 60*24) / (24));
آدرس:
دارکوب جهت توسعه اسکریپت بازی تراوین نیاز به برنامه نویس حرفه ای PHP دارد. جهت رویت توضیحات این اسکریپت بازی به توضیحات بازی تراوین در ویکی پدیا مراجعه نمایید.
از برنامه نویسان علاقه مند دعوت می گردد رزومه خود را به آدرس info[at]joomir.com ارسال نمایند.
برنامه نویسانی که تجربه بازی و توسعه این نرم افزار را دارند در اولویت هستند.
در صورت نیاز به برقراری تماس تلفنی لطفا با شماره های تلفن تهران: 22083926 - 22085386 - 22082258 تماس حاصل فرمایید.
پروژه توسعه اسکریپت تراوین یک پروژه دائمی بوده که پس از اتمام فاز اول آن که در حدود 60 روز به طول خواهد انجامید فازهای بعدی آن آغاز خواهد گردید.
زمان کاری برنامه نویس از شنبه تا پنج شنبه 9 تا 5 بعد از ظهر خواهد بود و پروژه به صورت فشرده خواهد بود و برنامه نویس مورد نظر فقط بر روی همین پروژه فعالیت خواهد نمود.
در صورت نیاز و کمبود زمان لازم خواهد بود که برنامه نویس در خارج از زمان کاری نیز به توسعه اسکریپت بپردازد.
سورس:
سرعت یک وب سایت به المان های مختلفی از قبیل سرعت سرور و هاستینگ وب سایت، گرافیک های استفاده شده در سایت و همچنین کدهای موجود در صفحات , ... وابسته می باشد. در این مقاله چند روش را برای مبتدیان بیان می نمایم تا با استفاده از آن بتوانند سرعت وب سایت خود را بالا ببرند. البته آموزش های این مقاله مناسب برای سرورهای لینوکس و سایت های نوشته شده توسط PHP می باشد.
افزایش سرعت وب سایت با استفاده از کش PHP
php تابعی دارد که با استفاده از آن می توانید محتوای صفحات را کش نموده و به یکباره به مرورگر کاربر ارسال نمایید برای این کار می توانید از کد زیر استفاده نمایید:
ob_start(); // شروع بافر
/* محتوای صفحه*/
ob_get_contents(); // گرفتن خروجی صفحه
ob_end_flush(); // ارسال محتوای صفحه به خروجی و پایان بافر
?>
بافر در حقیقت اطلاعات و محتوای صفحه را در حافظه ای ذخیره می نماید و پس از فراخوانی به مرورگر کاربر ارسال می نماید. شما می توانید محتوای کش شده را در یک فایل ذخیره نموده و زمان درخواست مجدد فایل توسط کاربر فایل کش شده را به کاربر نمایش دهید. این کار را می توانید توسط کد زیر انجام دهید.
//settings
$cache_ext = ".html"; //فرمت فایل
$cache_time = 3600; //کش کردن فایل برای 1 ساعت و یا 3600 ثانیه
$cache_folder = "cache/"; //فلدر برای نگهداری فایل های کش
$ignore_pages = array("", "");//در صورتی که نمی خواهید فایل خاصی کش شود
$dynamic_url = "http://".$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] . $_SERVER["QUERY_STRING"]; // پیدا کردن آدرس صفحه
$cache_file = $cache_folder.md5($dynamic_url).$cache_ext; // نام فایل کش
$ignore = (in_array($dynamic_url,$ignore_pages))?true:false; //چک کردن اینکه آیا فایل جزو فایل های درخواست نشده نباشد
if (!$ignore && file_exists($cache_file) && time() - $cache_time < filemtime($cache_file)) { //check Cache exist and it"s not expired.
ob_start("ob_gzhandler"); //فعال نمودن بافر با متغیر ob_gzhandler که محتوا را به صورت فشرده شده به خروجی می فرستد.
readfile($cache_file); //خواندن فایل کش
echo "<!-- cached page - ".date("l jS \of F Y h:i:s A", filemtime($cache_file)).", Page : ".$dynamic_url." -->";
ob_end_flush(); //چاپ خروجی و پایان بافر
exit(); //خروج از حلقه در صورتی که فایل کش موجود و فعال می باشد.
}
//فعال سازی بافر توسط فشرده سازی gzip.
ob_start("ob_gzhandler");
######## محتوای وب سایت شما در بخش زیر#########
?>
<!DOCTYPE html>
<html>
<head>
<title>عنوان صفحه</title>
</head>
<body>
بدنه صفحه.
</body>
</html>
<?php
######## محتوای صفحه#########
if (!is_dir($cache_folder)) { //ایجاد یک فلدر برای نگهداری فایل های کش در صورتی که وجود نداشته باشد
mkdir($cache_folder);
}
if(!$ignore){
$fp = fopen($cache_file, "w"); //باز نمودن فایل برای نوشتن
fwrite($fp, ob_get_contents()); //نوشتن محتوای بافر در یک فایل
fclose($fp); //بستن فایل
}
ob_end_flush(); //چاپ محتوای صفحه در خروجی
?>
با استفاده از روش بالا می توانید بار موجود بر روی سرور و همچنین سرور لود شدن صفحات را تا حد بسیاری افزایش دهید.
فعال نمودن فشرده سازی صفحات توسط htaccess
با استفاده از htaccess می توانید محتوای صفحه را به صورت فشرده به مرورگر کاربر ارسال نمایید. هم اکنون اکثر مرورگرها قابلیت خواندن اطلاعات به صورت فشرده سازی شده را دارند و با استفاده از امکانات htaccess می توانید این امکان را فعال نمایید. برای انجام می توانید کد زیر را در فایل htaccess خود کپی نمایید.
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
# Or, compress certain file types by extension:
<files *.html>
SetOutputFilter DEFLATE
</files>
البته می توانید این کار را در فایل های php خود نیز انجام دهید:
این کار در حدود 60% حجم را کاهش می دهد.
فعال کردن کش در htaccess
با استفاده از mod_expires
توسط این ماژول می توانید تنظیمات کنترل کش خود را انجام دهید برای انجام این کار کافی است کد زیر را در فایل htaccess خود کپی نمایید:
ExpiresActive On
ExpiresDefault A300
# Expires after 1 month
ExpiresByType image/gif A2592000
ExpiresByType image/png A2592000
ExpiresByType image/jpg A2592000
ExpiresByType image/x-icon A2592000
ExpiresByType application/pdf A2592000
ExpiresByType application/x-javascript A2592000
ExpiresByType text/plain A2592000
# Expires after 1 day
ExpiresByType text/css A86400
</ifModule>
خط ExpiresDefault می گوید فایل ها بعد از300 ثانیه اکسپایر گردند و خطوط ExpiresByType می گوید این فرمت های فایل برای2592000 کش شوند.
با استفاده از mod_headers
با استفاده از mod_expires می توانید نوع کش را کنترل نمایید. برای انجام این کار کد زیر را در فایل htaccess خود کپی نمایید.
ExpiresActive On
# Expires after 1 month
<filesMatch ".(gif|png|jpg|jpeg|ico|pdf|js|htm|html|txt)$">
Header set Cache-Control "max-age=2592000"
</filesMatch>
# Expires after 1 day
<filesMatch ".(css)$">
Header set Cache-Control "max-age=86400"
</filesMatch>
</ifModule>
خط ExpiresActive اکسپایر شدن را فعال می نماید و توسط filesMatch می توانید فرمت های فایل خاصی را کنترل نمایید. توسط این ماژول می توانید از این هم فراتر روید و موارد بیشتری را تنظیم نماید:
# Turn on Expires and set default expires to 3 days
ExpiresActive On
ExpiresDefault A259200
# Set up caching on media files for 1 month
<filesMatch ".(ico|gif|jpg|jpeg|png|flv|pdf|swf|mov|mp3|wmv|ppt)$">
ExpiresDefault A2419200
Header append Cache-Control "public"
</filesMatch>
# Set up 2 Hour caching on commonly updated files
<filesMatch ".(xml|txt|html|js|css)$">
ExpiresDefault A7200
Header append Cache-Control "private, must-revalidate"
</filesMatch>
# Force no caching for dynamic files
<filesMatch ".(php|cgi|pl|htm)$">
ExpiresDefault A0
Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
Header set Pragma "no-cache"
</filesMatch>
</ifModule>
فعال نمودن Cache-Control به public به آن معناست که مرورگر می توانید فایل را کش نماید و private, must-revalidate به این معناست که مرورگر نمی بایست صفحه را کش نماید. بخش no-store, no-cache, must-revalidate, max-age-0 به مرورگر اعلام می نماید هرگز این نوع فایل ها را کش ننمایید.
آدرس:
جوملا 1.0 مشکلات بسیاری در php 5.3.0 دارد که کاربران بسیاری این مشکلات را گزارش نموده اند.
هم اکنون برای وب سایت ها زمان آن رسیده به نسخه های بالاتر به روز رسانی شوند، زیرا نسخه 1.0 جوملا جزو نسخه هایی است که پشتیبانی نمی شود و باگ های بسیاری در آن وجود دارد. برای رویت آخرین نسخه جوملا به سایت رسمی http://joomla.org مراجعه نمایید.
پس از به روز رسانی نسخه php سرور به 5.3 و بالاتر مشکلات فراوانی در سایت جوملا نسخه 1.0 به وجود می آید که برای رفه مشکلات مواردی را در این مقاله برای شما بیان می نمایم. البته باز هم اعلام می نمایم که حتما جوملای خود را به آخرین نسخه به روز رسانی نمایید.
برای سازگاری جوملا 1.0 با php 5.3 موارد زیر را می بایست در سایت انجام دهید
در صورتی که مطالب در اکثر صفحات سایت نمایش داده نمی شود فایل Function.php موجود در آدرس /public_html/includes/Cache/Lite باز نموده.
جا گذاری نمایید:
$arguments = func_get_args();
با
$arguments = func_get_args();
$numargs = func_num_args();
for($i=1; $i < $numargs; $i++){
$arguments[$i] = &$arguments[$i];
}
برای رفع مشکل تماس با ما جوملا VCARD.CLASS.PHP ERROR کامپوننت COM_CONTACT نمایش به صورت سفید
برای رفع مشکل کامپوننت com_contact در صورتی که در سایت صفحه تماس با ما به صورت سفید نمایش داده می شود و در کنترل پنل خطای زیر را در تماس با ما مشاهده می نمایید:
Fatal error: Cannot redeclare quoted_printable_encode() in includes/vcard.class.php on line 74
فایل در آدرس includes/vcard.class.php را باز نموده و در خط 36 آن تابع quoted_printable_encode را بیابید. خطای اعلام شده تکرار تعریف این تابع می باشد برای جلوگیری از این اتفاق از تابع function_exists برای بررسی اینکه تابع قبلا تعریف شده و یا خیر استفاده نمایید.
if(!function_exists("quoted_printable_encode")) { // این بخش اضافه شود
function quoted_printable_encode($input, $line_max=76) {
/* ... */
}
} // این بخش اضافه شود
زمان جوملا
تغییر جدیدی که در php 5.3 به وجود آمده نحوه تعریف زمان می باشد.
بهترین روشی که برای این مورد پیشنهاد می نمایم استفاده از .htaccess جهت تعریف زمان پیش فرض می باشد. کد زیر را به htaccess سایت خود اضافه نمایید:
# set the server timezone
SetEnv TZ Australia/Victoria
DEPRECATED: FUNCTION EREGI() IS DEPRECATED IN INCLUDES/SEF.PHP ON LINE 533
در نسخه های جدید php علکرد تابع eregi با استفاده از تابع preg_match می باشد. بنابراین می بایست بخش هایی از سایت که از این مورد استفاده شده اصلاح گردد.
برای رفع مشکل تغییرات زیر را در فایل انجام دهید:
Line 370:
WAS:
if ($juri != "" && $juri != "/" && !eregi( "index\.php", $_SERVER["REQUEST_URI"] ) && !eregi( "index2\.php", $_SERVER["REQUEST_URI"] ) && !eregi( "/\?", $_SERVER["REQUEST_URI"] ) && $_SERVER["QUERY_STRING"] == "" ) {
BECOMES:
if ($juri != "" && $juri != "/" && !preg_match( "index\.php/i", $_SERVER["REQUEST_URI"] ) && !preg_match( "index2\.php/i", $_SERVER["REQUEST_URI"] ) && !preg_match( "/\?/i", $_SERVER["REQUEST_URI"] ) && $_SERVER["QUERY_STRING"] == "" ) {
-----------------------------------------
Line 388:
WAS:
if( $mosConfig_sef && $mosConfig_multilingual_support && $string!="index.php" && !eregi("^(([^:/?#]+):)",$string) && !strcasecmp(substr($string,0,9),"index.php") && !eregi("lang=", $string) ) {
BECOMES:
if( $mosConfig_sef && $mosConfig_multilingual_support && $string!="index.php" && !preg_match("^(([^:/?#]+):)/i",$string) && !strcasecmp(substr($string,0,9),"index.php") && !preg_match("lang=/i", $string) ) {
-----------------------------------------
Line 393:
WAS:
if ($mosConfig_sef && !eregi("^(([^:/?#]+):)",$string) && !strcasecmp(substr($string,0,9),"index.php")) {
BECOMES:
if ($mosConfig_sef && !preg_match("/^(([^\/:?#]+):)/i",$string) && !strcasecmp(substr($string,0,9),"index.php")) {
-----------------------------------------
Line 409:
WAS:
if (preg_match("@^[A-Za-z][A-Za-z0-9:_.-]*$@", $url["fragment"])) {
BECOMES:
if (preg_match("@^[A-Za-z][A-Za-z0-9:_.-]*$@/i", $url["fragment"])) {
-----------------------------------------
Line 533:
WAS:
eregi("^(https?:[\/]+[^\/]+)(.*$)", $mosConfig_live_site, $live_site_parts);
BECOMES:
preg_match("/^(https?:[\/]+[^\/]+)(.*$)/i", $mosConfig_live_site, $live_site_parts);
منبع:http://sitedesign.joomir.com/طراحی-سایت-جوملا/item/766-php-53-joomla-10.html
لیست کل یادداشت های این وبلاگ