Ярлыки

Показаны сообщения с ярлыком PHP. Показать все сообщения
Показаны сообщения с ярлыком PHP. Показать все сообщения

пятница, 1 апреля 2011 г.

PHP Оптимизация кода

  • Если метод может быть статическим, сделайте его статическим.
  • echo быстрее, чем print.
  • Передавайте в echo несколько параметров, вместо использования конкатенацию строк.
  • Устанавливайте максимальное количество повторений ваших циклов for до цикла, а не во время его выполнения.
  • Удаляйте свои переменные для освобождения памяти, особенно если это большие массивы.
  • Остерегайтесь волшебных методов, таких как __set, __get, __autoload.
  • require_once дорого обходится.
  • Указывайте полные пути в командах include/require, поиск файла будет идти быстрее.
  • Если вам необходимо определить время, когда скрипт был запущен, лучше используйте $_SERVER[’REQUEST_TIME’] вместо time().
  • Старайтесь применять strncasecmp, strpbrk и stripos вместо регулярных выражений.
  • str_replace быстрее, чем preg_replace, но strtr быстрее, чем str_replace.
  • Если функции замены строк, может принимать в качестве аргументов как массивы, так и одиночные символы, и если ваш список аргументов не слишком длинный, подумайте над тем, чтобы записать несколько одинаковых выражений замены, проходя один символ за раз, вместо одной строки кода, которая принимает массив поиска и замены
  • Лучше использовать конструкции else if, чем несколько конструкций if.
  • Подавление кодов ошибок при использовании @ работает очень медленно.
  • Используйте модуль Apache mod_deflate.
  • Прерывайте свои соединения с БД, когда закончите работать с ними.
  • $row["id"] в семь раз быстрее, чем $row[id].
  • Сообщения об ошибках дорого стоят
  • Не используйте функции внутри условия цикла for, например как здесь: for ($x=0; $x < count($array); $x). Здесь функция count() будет вызываться при каждом проходе цикла.
  • Инкремент локальной переменной в методе - самый быстрый. Почти также работает инкремент локальной переменной в функции.
  • Инкремент глобальной переменной в 2 раза медленее, чем локальной.
  • Инкремент свойства объекта (т.е. $this->prop++) в 3 раза медленнее, чем локальной переменной.
  • Инкремент неопределённой переменной в 9-10 раз медленнее, чем заранее инициализированной.
  • Объявление глобальной переменной, без использования её в функции, также замедляет работу (примерно на ту же величину, что и инкремент локальной переменной). Вероятно, PHP выполняет проверку на существование этой переменной.
  • Скорость вызовов метода, не зависит от количества методов в классе. Я добавил 10 методов в тестовый класс (до и после тестового метода) и производительность не изменилась.
  • Методы в производных классах работают быстрее, чем они же, определённые в базовом классе.
  • Вызов функции с одним параметром и пустым телом функции в среднем равняется 7-8 инкрементам локальной переменной ($localvar++). Вызов похожего метода - примерно равен 15 инкрементам.
  • Ваши строки, определённые при помощи апострофа, а не двойной кавычки, будут интерпретироваться чуть быстрее, т.к. PHP ищет переменные внутри текста в двойных кавычках. Конечно, вы можете использовать это только тогда, когда в вашей строке нет переменных.
  • Строки, разделённые запятыми, выводятся быстрее, чем строки, разделённые точкой. Примечание: это работает только с функцией echo, которая может принимать несколько строк в качестве аргументов.
  • PHP-скрипты будут обрабатываться, как минимум, в 2-10 раз медленнее, чем статические HTML-страницы. Попробуйте использовать больше статических HTML-страниц и меньше скриптов.
  • Ваши PHP-скрипты компилируются каждый раз, если скрипты они не кэшируются. Кэширование обычно увеличивает производительность на 25-100% за счёт экономии времени на компиляцию.
  • Кэшируйте, насколько это возможно. Используйте memcached — это высокопроизводительная система кэширования объектов в памяти, которая повышает скорость веб-приложений за счёт уменьшения времени загрузки БД. Кэшированный микрокод полезен тем, что позволяет вашему скрипту не перекомпилироваться заново для каждого запроса.
  • При работе со строками, для определения длины строки, вы, разумеется, захотите использовать функцию strlen(). Эта функция работает очень быстро, ведь она не выполняет каких-либо вычислений, а лишь возвращает уже известную длину строки, доступную в zval-структуре (внутренняя структура C, используемая при работе с переменными в PHP). Однако потому, что strlen() — функция, она будет работать медленно за счёт вызова некоторых операций, таких как приведение строки в нижний регистр и поиска в хэш-таблице, только после которых будут выполнены основные действия функции. В некоторых случаях вы сможете ускорить свой код за счёт использования хитрости с isset(). Было: if (strlen($foo) < 5) { echo "Foo is too short"; }
    Стало: if (!isset($foo{5})) { echo "Foo is too short"; }
    Вызов isset() быстрее, чем strlen() потому, что isset() - не функция, а языковая конструкция. За счёт этого isset() не имеет практически никаких накладных расходов на определение длины строки.
  • Инкремент или декремент переменной при помощи $i++ происходит немного медленнее, чем ++$i. Это особая специфика PHP, и не нужно таким образом модифицировать свой C и Java-код думая, что он будет работать быстрее, этого не произойдёт. ++$i будет быстрее в PHP потому, что вместо четырёх команд, как в случае с $i++, вам понадобится только три. Пост-инкремент обычно используется при создании временных переменных, которые затем увеличиваются. В то время, как пре-инкремент увеличивает значение оригинальной переменной. Это один из вариантов оптимизации PHP-кода в байт-код утилитой Zend Optimizer. Тем не менее, это хорошая идея, поскольку не все байткод-оптимизаторы оптимизируют это, также остаётся немало скриптов, работающих без оптимизации.
  • Не всё должно быть написано с использованием ООП. Часто это излишне, поскольку методы и объекты занимают много памяти.
  • Не определяйте каждую структуру данных в виде класса - массивы бывают намного полезнее.
  • Не слишком разбивайте методы. Думайте, что вы действительно будете повторно использовать.
  • Вы всегда можете разбить код на методы позже, если возникнет такая необходимость.
  • Используйте сколько угодно предопределённых функций.
  • Если в вашем коде есть функции, работающие очень долго, может стоит их переписать на C в виде расширения?
  • Профилируйте свой код. Профилирование покажет вам, сколько времени выполняются части вашего кода.
  • mod_gzip — модуль Apache, который позволяет сжимать ваши данные на лету и может существенно уменьшить объем передаваемых клиенту данных.
link

Curl GET-запросы

  1.  
  2. function qwe($qerpay)
  3. {
  4. $chp = curl_init("http://xxx/?$qerpay";
  5. curl_setopt($chp, CURLOPT_HEADER, 0);
  6. curl_setopt($chp, CURLOPT_RETURNTRANSFER,1);
  7. curl_setopt($chp, CURLOPT_SSL_VERIFYPEER,0);
  8. $resultp=curl_exec($chp);
  9. curl_close($chp);
  10. $pp = xml_parser_create();
  11. xml_parse_into_struct($pp,$resultp,$valsp,$indexp);
  12. xml_parser_free($pp);
  13. return $valsp['1']['value']; }
     

PHP Ограничение на размер закачиваемого файла

По умолчанию в PHP стоит ограничение на загрузку файлов не больше 2 Мб. Обычно этого хватает но бывают случаи что необходимо загрузить большие объемы и для этого потребуется увеличить лимиты на загрузку. Для этого нужно сделать небольшие изменения в /etc/php5/cli/php.ini.

Пропишите (измените, если такие уже присутствуют) вот такие строки:
1
2
upload_max_filesize = 10М
post_max_size = 12М
Если у вас нет прав доступа к файлу php.ini попробуйте прописать эти параметры в файле .htaccess который должен находится в корне вашего сайта:
1
2
php_value upload_max_filesize 10M
php_value post_max_size 12M
В данных примерах мы поставили ограничение на загрузку файла максимальным размером в 10Мб и отправку POST данных с максимальным размером в 12Мб.

link

пятница, 25 марта 2011 г.

cURL игнорирование сертификатов в https соединении

В php: curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);
В коммандной строке: используя ключ -k/--insecure
 
link 

четверг, 24 марта 2011 г.

PHP спецсимвол табуляции в строке

\t - горизонтальная табуляция (HT или 0x09 (9) в ASCII)

link

PHP Вставить n символов в строку

можно использовать str_repeat которая на входе принимает строку или символ которые нужно повторить и количество повторений.. полученную строку можно добавить в нужную нам
link

есть еще str_pad link

среда, 23 марта 2011 г.

PHP. Сохранение массива в файл

$fp=fopen('tmp','w');
if($fp)
{
    fwrite($fp,"\$_array=>array(\r\n");
    array_to_file($res_obj,1,$fp);
    fwrite($fp,")\r\n");
    fclose($fp);
}

//на входе массив, количество отступов, и файловый дескриптор  
function array_to_file($arr,$i,$fp)
{
//устанавливаем отступ
    $tab = str_repeat("\t",$i);
    foreach($arr as $key => $val)
    {
        if(is_array($val))
        {
            $tmp = "$tab'$key'=>array(\r\n";
            fwrite($fp,$tmp);
            array_to_file($val,++$i,$fp);
            if( next($arr) === false) $com = '';
            else $com = ',';
            fwrite($fp,"$tab)$com\r\n");
        }
        else
        {
            if( next($arr) === false) $com = '';
            else $com = ',';
            fwrite($fp,"$tab'$key'=>'$val'$com\r\n");
        }
    }   
}   

такие массивы удобно использовать используя include(array_file.inc);
важно помнить что область видимости ограниченна фигурными скобками

http://it.nittis.ru/php-save-array-as-file.html

понедельник, 14 марта 2011 г.

PHP mkpath

  function mkpath($path)
  {
    if(@
mkdir($path) or file_exists($path)) return true;
    return (
mkpath(dirname($path)) and mkdir($path));
  }
?>


link

пятница, 4 марта 2011 г.

PHP отправка файлов методом POST

С использованием библиотеки pear: HTTP_Request 
link

установка:
apt-get install pear
pear install HTTP_Request

пример использования:
require_once "HTTP/Request.php";
$req =& new HTTP_Request("http://upload.example.com/upload.php");$req->setBasicAuth("johndoe""foo");$req->setMethod(HTTP_REQUEST_METHOD_POST);
$result $req->addFile('file_upload_field''/home/johndoe/text.pdf''application/pdf');
if (
PEAR::isError($result)) {
    echo 
$result->getMessage();
} else {

    
$response $req->sendRequest();

    if (
PEAR::isError($response)) {
        echo 
$response->getMessage();
    } else {
        echo 
$req->getResponseBody();
    }
}
?>

среда, 2 марта 2011 г.

PHP сравнить даты

$month 4;$day 14;$year 2009;
$today  mktime(000date("m")  , date("d"), date("Y"));$date3 mktime(000$month+3  $day$year);$date1 mktime(000$month+1  $day$year);
if(
$today $date3$color='red';
elseif(
$today $date1$color='yellow';
else 
$color='green';


Link

PHP Удаление строки из файла

if ($id != "") {//$id номер строки которую нужно удалить
$id--;//так как нумерация начинается с 0
$file=file("file.txt");//преобразуем содержимое файла в массив 

for($i=0;$i$file);$i++)//обходим массив
if($i==$id) unset($file[$i]); //удаляем требуемую строку из массива

$fp=fopen("file.txt","w"); 
fputs($fp,implode("",$file)); //записываем массив в файл
fclose($fp);
}
?>
 
link 

PHP получить вчерашную дату

Для этого нужно из текущей даты вычесть один день
$yest_date=time()-60*60*24; 
$yest_date=date("Y-m-d",$yest_date);

link 

или использовать mktime
$tomorrow  = mktime(0, 0, 0, date("m")  , date("d")+1, date("Y"));$lastmonth = mktime(0, 0, 0, date("m")-1, date("d"),   date("Y"));$nextyear  = mktime(0, 0, 0, date("m"),   date("d"),   date("Y")+1);
link

PHP Работа с датой и временем

link

понедельник, 28 февраля 2011 г.

PHP если stripos не работает для кирилицы

Нужно использовать mb_stripos($t_str, 'гним',0,'utf-8');

link

PHP Различие между кавычками(") и апострофом (')

1) Имена переменных, заключенных в кавычки, заменяются соответствующими значениями, а строки в апострофах интерпретируются буквально.

  Пример:

$a="текст";
$x="Переменная a равна: $a";
$y='Переменная a равна: $a';
echo $x."
".$y;

  В результате:

Переменная a равна: текст
Переменная a равна: $a

  2) В строках, заключенных в кавычки, распознаются все служебные символы, а в апострофах только "\\".

  Пример:

$a='c:\new';
$b="c:\new";
echo $a."
".$b;

  В результате:

c:\new
c:
ew

  В строке "c:\new" есть служебный символ перевода строки - "\n".
link

Таблица символов

http://www.templatebest.ru/specsimvol.php