Archive

Archive for the ‘PHP’ Category

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

April 14th, 2009 Venelin Kochev 1 comment

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

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

February 10th, 2009 Venelin Kochev 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 Venelin Kochev 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 Venelin Kochev 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 Venelin Kochev 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 Venelin Kochev 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: ,