Archive

Archive for the ‘PHP’ Category

Използване на php функции в javascript

April 14th, 2009 1 comment

Мислили ли сте някога че възможно да използвате base64_encode / decode , count, explode, file_get_contents, fopen и много други в javascript?
Е това вече е възможно с PHP.JS , а това е пълния списък на функциите.

PHP тестове за опитимизация

February 10th, 2009 No comments

Вчера от някъде ми попаднаха 40 съвета за оптимизране на PHP код, реших да направя някои тестове и да проверя дали това което казват е вярно :D

1. Не използвайте @ пред функция, резултати от тестовете:
създадох един малък масив и пред print_r добавих @:

със @:

Array
(
[3] => 1
[4] => 4
[5] => 1
[6] => 8
[7] => 9
[1] => 14
)
Exec Time: 0.0355
Memory Usage: 1044

без @:

Array
(
[3] => 1
[4] => 4
[5] => 1
[6] => 8
[7] => 9
[1] => 14
)
Exec Time: 0.0282
Memory Usage: 952

II. Номер 2 е проверка дължината на стринг, изпълнението на strlen забавя изпълнението на кода:

if (strlen($foo) < 5) { echo "Foo is too short"; }

Foo is too short
Exec Time: 0.0521
Memory Usage: 932

if (!isset($foo{5})) { echo “Foo is too short”; }

Foo is too short
Exec Time: 0.0009
Memory Usage: 816

Стриктна проверка

January 21st, 2009 No comments

Е на това му се вика “яка” проверка:

<?php
 if ($value == NULL) {
    $value=0;
 }
 if ($value == "") {
    $value=0;
 }
 if ($value == null) {
    $value=0;
 }
 if ($value == "null") {
    $value=0;
 }
 if (!$value) {$value=0;}
?>
Categories: Fun, IT, PHP, Уеб Tags: , , ,

Премахване на PHPSESSID

April 16th, 2008 1 comment

Премахването на PHPSESSID от линковете по страницата става по следния начин.
В .htaccess:

php_flag session.use_trans_sid off

или

php_value session.use_only_cookies 1
php_value session.use_trans_sid 0

В php код:

ini_set('session.use_trans_sid', false);

Като трябва да бъде преди session_start();

Categories: Apache, PHP Tags: , , ,

Alternative PHP Cache

April 4th, 2008 No comments

APC е PECL extension за PHP, който позволява кеширането на данни и по този начин примерно се избягва изпълнението на една MySQL заявка и ако тя връща едни и същи данни сами се сещате, че е излишно да се изпълнява всеки път, разбира се може да се хардкод-не резултата в кода, но по добрия вариант за мен е кеширането. Преди време тествах различните кеширащи системи от тези тестове са ми останали няколко класове, които реших да споделя.

APC Cache Class:

<?php
 
/**
 * Alternative PHP Cache Class
 * 
 * @param 	      int $lifetime
 * @author 	      Venelin Kochev < vkwebdev@gmail.com >
 * @version 	      1.0
 * @link 		http://cyberroot.org
 * @copyright 	     2008 Venelin Kochev
 *
 */
 
class APCCache{
 
	//Cache life time
	//@param: integer
	private $lifetime = 3600;
 
	function __construct($lifetime = ''){
 
	   if (!extension_loaded('apc')) {
             die('<b>Fatal Error:</b> Cache::__construct() - The apc extension must be loaded for using Cache !');
	   }
 
           if(isset($lifetime)) $this->lifetime = $lifetime;
 
	}
 
    /**
     * Save cache data.
     *
     * @param array $data
     * @param string $id
     * @return boolean
     */	
    public function save($data, $id){
 
        $result = apc_store($id, array($data, time()), $this->lifetime);
 
        return $result;
    }
 
    /**
     * Load cache by Key
     *
     * @param string $id
     * @return array
     * 
     */
    public function load($id){
 
        $tmp = apc_fetch($id);
        if (is_array($tmp)) {
            return $tmp[0];
        }
        return false;
    }
 
    /**
     * Delete cache by Key.
     *
     * @param string $id
     * @return boolean
     */
    public function remove($id){
 
        return apc_delete($id);
    }
}
 
?>

Използва се по следния начин:

<?php
 
$lifetime = 3500;
 
$cache = new APCCahce($lifetime);
 
if(!$count = $cache->load('count_category')){
   $count = GetCount(); // трябва да връща резултата от MySQL query-то.
   $cache->save($count, 'count_category')
}
 
?>

Така се прави проверка дали кеш-а съществува, ако го няма се създава, при следващото извикване заявката няма да се изпълни и ще бъде зареден кеш-а. ;)

Categories: MySQL, PHP Tags: ,

PHP redirect

April 3rd, 2008 1 comment

Случвало ли ви се е да ползвате:

header('Location: http://google.com/');

и в този момента да ви се отговори:

Cannot modify header information – headers already sent by …

и тогава се налага да го заменяте с meta redirect или някакъв redirect с javascript, а също и ob_start(); ob_end_flush(); което си е дразнещо.

Ето една алтернатива:

<?php
 
function redirect($url){
   if (!headers_sent()){
     header('Location: '.$url);
   } else {
     echo '<script type="text/javascript">';
     echo 'window.location.href="'.$url.'";';
     echo '</script>';
     echo '<noscript>';
     echo '<meta http-equiv="refresh" content="0;url='.$url.'" />';
     echo '</noscript>';
  }
}
 
?>

Тази функция проверява дали са изпратени header-ите, ако не са redirect-ва с PHP функцията “header”, ако са изпратени вече redirect-a се прави с javascript, а ако по някаква случайност потребителя няма support на javascript, redirect-a става с meta refresh на HTML

За тези които умуват още, ползва се така:

redirect('http://google.com/');
Categories: HTML, JavaScript, PHP Tags: ,