Кратки съвети за php

Тук може да намерите полезни съвети и примери за много ситуации.

 

Safe mode в PHP автонатично прилага escapeshellargs() на аргумента на exec()

Когато safe mode е пуснат, може да имате проблеми с ползването на функцията exec(). Тъй като в този случай PHP автоматично прилага escapeshellargs(), това кара функцията exec($cmd), да работи все едно е exec(escapeshellargs($cmd)). Ако вашето приложение вече е ескейпнало аргументите на командата ще се получи двойно ескейпване и командата да пропадне:

exec('convert  -resize ">10x10"  img.jpg') - грешно
exec('convert  -resize >10x10 img.jpg') - нормално изпълнение

Също така не може да пренасочвте stdin, stdout, stderror, понже ">" и "<" се ескейпват:

exec('who > file.txt') - грешно, опитва се да изпълни who \> file.txt


При PHP точките в имената на HTTP променливите се променят автоматично на долни черти

Има една особеност в начина, по който PHP използва HTTP променливи. Ако името на променливата съдържа точка(.) тогава тя се превръща в долна черта(_). Например ако напишете http://doamin.com/script.php?var.1=abc в браузера си:

echo $_GET['var.1'] - не извежда нищо
echo $_GET['var_1'] - извежда "abc"


Тире в регулярен израз

Има една особеност при използване на тире при ereg(). Например ако искаме един низ да е само от букви, цифри, точки и тирета, трябва да се постави тирето накрая на списъка. За разлика от точката, не слагайте обратна наклонка преди него:
ereg('^[a-zA-Z0-9\.-]+$', $string)

HTTP хедъри за предотвратяване на кеширането на страницата от браузъра

<?php
    header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
    header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' );
    header( 'Cache-Control: no-store, no-cache, must-revalidate' );
    header( 'Cache-Control: post-check=0, pre-check=0', false );
    header( 'Pragma: no-cache' );
?>

Регулярен израз за изваждане на съдържанието на span елемент по id или class атрибут

Това е регулярен израз за изваждане на съдържанието на всички span елементи от даден HTML текст в променливата $data по id или class атрибут:

$regex = '/\<span\s*class=[\'"]?classname[\'"]?\s*>([^\<]+)\<\/span\>/imu';
preg_match_all($regex, $data, $matches, PREG_PATTERN_ORDER);
print_r($matches[1]);

$regex = '/\<span\s*id=[\'"]?spanid[\'"]?\s*>([^\<]+)\<\/span\>/imu';
preg_match_all($regex, $data, $matches, PREG_PATTERN_ORDER);
print_r($matches[1]);

 


Определяне на разширението на файла чрез PHP


За да се определеи разширението на файла, използвайте следния фрагмент в PHP скрипт:

$ext = end(explode(".", $filename));

Тук $filename може да е самото име на файла, пълния или относителния път.