Настройки php.ini
# Максимальный размер загружаемого файла.upload_max_filesize = 2M
сменить кодировку сайта
header( "Content-Type: text/html; charset=utf-8" );
Конструкции языка
foreach
конструкция: foreach ($params as $name => &$value) проход по ассоциативному массиву
в $name записываются ключи
в $value значения.
при изменении value будет изменяться массив $params
function &name() # результат возвращается по ссылке (не происходит копирования)
однострочные функции (аналог lambda в python)
$lambda = create_function('', 'return "g_item_id=%d";');$sql = "delete from {imce_gallery_items} where " . (implode( " or ", array_map( $lambda, $key_array ) ) );
Классы
Объявление
class MyClass{var $attr;
function __construct(){ // конструктор в php5.
$this->attr = "1"; // ключевое слово $this - указатель на текущий объект
// ключевое слово self - указатель на текущий класс
}
}
В php4 название конструктора совпадает с название класса. Если в php5 для класса не найдена функция __construct, то в качестве конструктора берётся функция с именем совпадающим с именем класса.
Переменная класса (статическая переменная)
задать значения статических переменных
По-умолчанию статической переменной можно задать только статическое занчение:class Module extends Common{
public static $tt = "какое-то там дефолтное значение. нельзя даже написать \$tt=md5();";
}
Но можно определить значение более-менее динамически:public static $tt = "какое-то там дефолтное значение. нельзя даже написать \$tt=md5();";
}
class Module extends Common{
public static $tt;
public static function init(){
self::$tt = md5("param1");
}
}
Module::init(); // сразу после объявления класса вызываем статическую функцию, которая определяет значения статических переменных.
public static $tt;
public static function init(){
self::$tt = md5("param1");
}
}
Module::init(); // сразу после объявления класса вызываем статическую функцию, которая определяет значения статических переменных.
На самом деле Module::init(); можно вызывать и перед кодом класса, т.к. php-файл сначала загружается и разбирается, а уже потом выполняется.
$b = new MyClass();
$c = new MyClass();
print_r( MyClass::$byId );
class MyClass{
static public $byId = Array();
function __construct(){
self::$byId[] = $this;
}
}
реестр объектов внутри класса
$a = new MyClass();$b = new MyClass();
$c = new MyClass();
print_r( MyClass::$byId );
class MyClass{
static public $byId = Array();
function __construct(){
self::$byId[] = $this;
}
}
Работа с файлами
$a = fopen( "1.txt", "w"); // открыть файл на запись. если файл не существует, создатьfwrite( $a, "aaa" ); // записать строку в файл
fclose( $a );
Загрузка файла на сервер
<form method="post" enctype="multipart/form-data">if(copy($_FILES["filename"]["tmp_name"], "c:/temp/".$_FILES["filename"]["name"]))
{
echo("Файл успешно загружен <br>");
}
Получить список директорий
function dirList($path){$componentList = array();
foreach (scandir($path) as $dir){
if (is_dir($path . $dir) && $dir !== '.' && $dir !== '..'){
$componentList[] = $dir;
}
}
return $componentList;
}
Работа с сетью
Curl
$ch = curl_init();curl_setopt($ch, CURLOPT_URL, "http://web20/ws/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); // чтобы полученный ответ от удалённого сервера был доступен как результат curl_exec();
$res = curl_exec($ch);
curl_close($ch);
post
curl_setopt($ch, CURLOPT_POST, 1);curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
get и urlencode
в php нет функции, которая по массиву создаёт url-строку (типа питоновской urllib.urlencode), поэтому:$authParam = array('msgType'=>'loginRequest','session'=>$dsS,'login'=>$_POST["login"],'passwd'=>$_POST["pswd"]);
function dictToUrl($authParam){
array_walk($authParam, create_function('&$v,$k', '$v = $k."=".urlencode($v) ;'));
return implode("&",$authParam);
}
function dictToUrl($authParam){
array_walk($authParam, create_function('&$v,$k', '$v = $k."=".urlencode($v) ;'));
return implode("&",$authParam);
}
Буфер
интересная php-конструкция:
function obHandler($text) // $text, видимо, это содержимое буфера
{
header('Content-Type: application/json; charset=UTF-8');
return json_encode($GLOBALS['_RESULT']);
}
ob_start("obHandler"); // назначает callback
XML
DOM
Пусть есть некий xml-файл:<?xml version="1.0" encoding="utf-8" ?>
<commands>
<command name="Get" table="User"/>
<command name="Get" table="User">
<item>
<guid>ce987888-c6ba-4527-bbff-85b356f9ad9b</guid>
</item>
</command>
</commands>
Парсим его:<commands>
<command name="Get" table="User"/>
<command name="Get" table="User">
<item>
<guid>ce987888-c6ba-4527-bbff-85b356f9ad9b</guid>
</item>
</command>
</commands>
$xml = DOMDocument::load( "1.xml" );
$nodeList = $xml->documentElement->getElementsByTagName("command");
for ( $i=0; $i < $nodeList->length; $i++ ){
$command = $nodeList->item($i); // тип DOMNode
print $command->nodeName . "<br>"; // название "command" ноды из строки
// <command name="Get" ....
$domAttr = $command->attributes->getNamedItem("name"); // из DOMNamedNodeMaps вытаскиваем DOMAttr
print sprintf( '%s="%s"', $domAttr->name ,$domAttr->value );
print "<br>";
}
$nodeList = $xml->documentElement->getElementsByTagName("command");
for ( $i=0; $i < $nodeList->length; $i++ ){
$command = $nodeList->item($i); // тип DOMNode
print $command->nodeName . "<br>"; // название "command" ноды из строки
// <command name="Get" ....
$domAttr = $command->attributes->getNamedItem("name"); // из DOMNamedNodeMaps вытаскиваем DOMAttr
print sprintf( '%s="%s"', $domAttr->name ,$domAttr->value );
print "<br>";
}
Именованные параметры <command name="Get" table="User"/> вытаскиваются из DOMNode через параметр attributes (тип DOMNamedNodeMaps).
Вложенные узлы <command name="Get" table="User"><item>... вытаскиваются из DOMNode через параметр childNodes (тип DOMNodeList).
Чтобы получить текст внутри узла: $guidNode->childNodes->item(0)->wholeText (но что-то подсказывает, что должен быть метод проще)
SOAP
SOAP - это протокол обмена сообщениями в формате XML, передаваемых по какому-то сетевому протоколу (чаще всего через HTTP).С помощью SOAP реализуются различные web-сервисы. Все возможные запросы к web-сервису могут быть описаны в WSDL-документе (см. http://www.cbr.ru/DailyInfoWebServ/DailyInfo.asmx?WSDL). Для тестирования запросов есть хорошая программа soapUI.
Классы для работы с SOAP в PHP доступны после установки соответствующего расширения (extension). Под windows - это файл php_soap.dll, он есть в дистрибутиве PHP. В Denwer-е по-умолчанию SOAP не установлен.
Xdebug
1. скачать dll c http://xdebug.org/. Пред скачиванием сайт попросит отправить phpinfo(), зато потом расскажет подробно что и как надо устанавливать.2. в php.ini надо прописать настройки:
[Xdebug]
zend_extension_ts = \usr\local\php5\ext\php_xdebug-2.1.0-5.2-vc6.dll
xdebug.profiler_enable=On
xdebug.profiler_output_dir=\traces
xdebug.profiler_output_name = "cachegrind.out.%t.%s"
zend_extension_ts = \usr\local\php5\ext\php_xdebug-2.1.0-5.2-vc6.dll
xdebug.profiler_enable=On
xdebug.profiler_output_dir=\traces
xdebug.profiler_output_name = "cachegrind.out.%t.%s"
я их добавил сразу после "секции" Dynamic Extensions
3. установил php-программу webgrind
Все запускаемые фалы будут оставлять после себя логи в указанной для трейсов директории.
После запуска webgrind надо нажать кнопку update, после этого он начнёт анализировать самый последний лог-файл.
Анализ может идти несколько минут, если файл большой.
3. установил php-программу webgrind
Все запускаемые фалы будут оставлять после себя логи в указанной для трейсов директории.
После запуска webgrind надо нажать кнопку update, после этого он начнёт анализировать самый последний лог-файл.
Анализ может идти несколько минут, если файл большой.
Комментариев нет:
Отправить комментарий