Цель: И вот.. .пробил час перехода на зимнее время ... в то время когда на серверах zoneinfo был успешно обновлен и системы показывали правильное время, php всё равно упрямился и показывал зимнее ...
Дано:
PHP 5.3.5
Показаны сообщения с ярлыком php. Показать все сообщения
Показаны сообщения с ярлыком php. Показать все сообщения
1 нояб. 2011 г.
22 сент. 2011 г.
факир был пьян... статус 200 вместо 404 ...
Цель: Пропуская через сокет nginx'a, а в качестве такого выступает php-fpm, php-сценарий, не зависимо от того, что в сценарии есть:
кто же режет 404 СТАТУС?! nginx? php-fpm? or php?
header("HTTP/1.0 404 Not Found");
возвращается ответ с статусом 200 вместо 404, хотя статусов 301 и 302 это не касается ...кто же режет 404 СТАТУС?! nginx? php-fpm? or php?
#cat /1.php
<?php
header("HTTP/1.0 404 Not Found");
?>
#curl -i test.local/1.php
HTTP/1.1 200 OK
Server: nginx/1.0.6
Date: Thu, 22 Sep 2011 10:01:13 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: close
X-Powered-By: PHP/5.3.6
1 сент. 2011 г.
и снова русские буквы в именах файлов ....
Цель: Научить ckfinder, при загрузке файлов на сервер, транслитерации имен.
Дано: Drupal 7, transliteration (1.11), ckfinder (2.0.2)
Решение:
Увы, для решения этой задачи пришлось залезть в модуль transliteration ...
И так, лезем в файл: filemanager.config (лежит туть: \sites\all\modules\ckeditor\includes\, ну или где у вас там ckeditor установлен), находим в нем строчку (где та в 70 строках):
после,находим файл: /sites/all/modules/transliteration/transliteration.module
Дано: Drupal 7, transliteration (1.11), ckfinder (2.0.2)
Решение:
Увы, для решения этой задачи пришлось залезть в модуль transliteration ...
И так, лезем в файл: filemanager.config (лежит туть: \sites\all\modules\ckeditor\includes\, ну или где у вас там ckeditor установлен), находим в нем строчку (где та в 70 строках):
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);и дописываем:
transliteration_init();
после,находим файл: /sites/all/modules/transliteration/transliteration.module
8 июл. 2011 г.
Just benchmark. Легкий SQL запрос VS запрос SQL с использованием JOIN
Цель:
Вопрос, что быстрее работает... sql с кучей join'ов или более простые запросы но с дополнительной обработкой сценария на сервере ...
Нужно достать последнюю модификацию файла (таблица ФАЙЛ), находящихся в разных категория (таблица КАТЕГОРИИ), причем категории включают в себя подкатегории, благо второго порядка. Данные связывающие сия безобразия находятся в таблице ЛИНКС.
Вопрос, что быстрее работает... sql с кучей join'ов или более простые запросы но с дополнительной обработкой сценария на сервере ...
Нужно достать последнюю модификацию файла (таблица ФАЙЛ), находящихся в разных категория (таблица КАТЕГОРИИ), причем категории включают в себя подкатегории, благо второго порядка. Данные связывающие сия безобразия находятся в таблице ЛИНКС.
28 февр. 2011 г.
PHP && FoxPro DBF
Цель: научить зверюгу Пыха читать данные БД хитрого лиса ...
Дано:
- OS Window Server 2003 с многочисленными обновлениями, увы, под юниксами решения пока не нашел =(
- Apache and etc. (all this not necessarily)
- Базы даных FoxPro, то бишь файлы *.dbf и *.cdx и
- PHP 5.3.5 (хотя версия принципиальной разницы не играет)
3 нояб. 2010 г.
SlidePress и NextGEN Gallery в одной упряжке!
Цель: Учим работать плагин SlidePress с плагином NextGEN Gallery в одной связке для CMS WordPress.
Дано:
- NextGEN Gallery (Version: 1.3.6)
- SlidePress (Version: 1.4.5)
Решение:
Плагину SlidePress'у можно скормить xml-формата файлик, опция Director. А у плагина NextGEN Gallery, уже имеется свой генератор xml (/wp-content/plugins/nextgen-gallery/xml/): imagerotator.php
Но вот досада та, его структура не подходит под xml формата SlidePress плагина...
Что делаем? Правильно делаем копию этого файлика и задаем ему то что нужно ;) а если быть точнее SlidePress требует для себя следующую структуру:
<gallery>
<album description="описание альбома" title="имя альбома">
<img
caption="описание картинки"
link="путь куда линковать для просмотра в оригинале"
src="путь к вашей картинке"
title="заголовок картинки"
tn="путь к миниатюрной копии картинки"
/>
</album>
</gallery>
если не очень та и хочется вникать и переписывать что то, то качаем вот от седа уже готовый генератор xml списка галереи NextGEN Gallery для нашего плагина SlidePress:[СКАЧАТЬ] и кладем его в папку /wp-content/plugins/nextgen-gallery/xml/ Теперь идем в админку сайта, в управление галереями плагина SlidePress, создаем тестовую галерею, указываем в поле "XML Source" -> "Director" и в текстовой строке пишем путь к нашему ранее созданному/скаченному xml генератору: http://panno64.ru/wp-content/plugins/nextgen-gallery/xml/gen_xml_sp.php?gid=5
где gid=5, это идентификатор галереи NextGEN Gallery
... можно и без него, но тогда картинок будет много.
вот и всё... =)
12 февр. 2010 г.
php + Firebird connect remote host
Цель: Заставить работать с удаленной БД ...
Дано:
- Windoвьсь
- PHP 5.2.12
+ штатная библиотека расширения на Firebird/InterBase, gds32.dll
Решение:
запускаем и имеем следующее:
что делать?!
косяк в gds32.dll ... онная уже старенькая, поношенная, а почему её не обновляют вопрос второстепенный ...
Если уже имеется установленный на каком нить хосте свеженький Firebird (в моем случае v.1.5) дергаем у него дллку fbclient.dll и тащим к себе. Переименовываем на gds32.dll и заменяем прежнию, старенькую, нашей.
Рестартуем сервер и радуемся жизни.
Ну а у кого нет установленого Firebird, тащим его (5-7 метров), ставим и дергаем то что нужно, или как вариант лезем на мамонт поисковик по фтп и шарим на тему fbclient.dll.
Некоторые данные о fbclient.dll
Примечание:
На момент написания заметки на офф сайте имеется Firebird 2.1.3 (http://www.firebirdsql.org/)
Дано:
- Windoвьсь
- PHP 5.2.12
+ штатная библиотека расширения на Firebird/InterBase, gds32.dll
Version language : Английский (США)
CompanyName : Inprise Corporation
FileDescription : InterBase Server
FileVersion : WI-V6.0.1.0
InternalName : IBSERVER60
LegalCopyright : Copyright (c) 1999 Inprise Corporation
ProductName : InterBase Server
ProductVersion : 6.0.1.0
Решение:
$dbh = ibase_connect("RemoteHostName:C:/dir/to/db/db_name.gdb", "login", "password");запускаем и имеем следующее:
Warning: ibase_connect() [function.ibase-connect]: Unable to complete network request to host "RemoteHostName". Failed to locate host machine. Undefined service gds_db/tcp. in C:\Program Files\Apache Software Foundation\Apache2.2\htdocs\test.php on line 2
что делать?!
косяк в gds32.dll ... онная уже старенькая, поношенная, а почему её не обновляют вопрос второстепенный ...
Если уже имеется установленный на каком нить хосте свеженький Firebird (в моем случае v.1.5) дергаем у него дллку fbclient.dll и тащим к себе. Переименовываем на gds32.dll и заменяем прежнию, старенькую, нашей.
Рестартуем сервер и радуемся жизни.
Ну а у кого нет установленого Firebird, тащим его (5-7 метров), ставим и дергаем то что нужно, или как вариант лезем на мамонт поисковик по фтп и шарим на тему fbclient.dll.
Некоторые данные о fbclient.dll
FileDescription : Firebird SQL Server
FileVersion : WI-V1.5.3.4870
ProductVersion : 1.5.3.4870
SpecialBuild : Firebird 1.5
Примечание:
На момент написания заметки на офф сайте имеется Firebird 2.1.3 (http://www.firebirdsql.org/)
28 янв. 2010 г.
IE строгий дядько, порой слишком ...
Цель: IE(7,8): jquery .ajax => error: parseerror
Дано: jquery 1.3.2 (вполне возможно как и младшие так и старшие версии)
Решение:
Фишка не в самом jquery, а в излюбленным всеми IE. Не впервой ругаюсь, все тестыф под мозиллой и в самый последний момент под ИЕ, и как результат сплошные неожиданности ...
есть кусок:
По части url: "/index.php"
содержание index.php:
Опера, мозила, софари, хром съели на ура, результат всплывающее окно с текстом True ...
IE полон неожиданностей с визгом закричал "Error: Status:parseerror"
пляски с типом (dataType) ни к чему не приводили, снифером (вирешарком) то же всё чисто ... к примеру для типа json => ['True']
Чего не хватало?!
всё проще оказалось ... пишем по части url: "/index.php"
вуаля.
еще один момент не в пользу ИЕ:
Опера, мозила, софари, хром: видим то что и ожидаем
IE: видим то что и ожидаем от IE, а собственно НИЧЕГО
костыль или нет, не знаю, честно копать некогда ... но работает
вполне возможно что, сработает как
Дано: jquery 1.3.2 (вполне возможно как и младшие так и старшие версии)
Решение:
Фишка не в самом jquery, а в излюбленным всеми IE. Не впервой ругаюсь, все тестыф под мозиллой и в самый последний момент под ИЕ, и как результат сплошные неожиданности ...
есть кусок:
$.ajax({
type: "POST",
url: "/index.php",
data: dataString,
cache: false,
dataType: "text",
error: function(msg, textStatus, errorThrown)
{
alert("Error: " + msg +"\r\nStatus: " + textStatus);
},
success: function(msg, status)
{
alert("MSG: "+msg);
}
});
По части url: "/index.php"
содержание index.php:
header("Content-Type: text/html");
print "True";
exit;
Опера, мозила, софари, хром съели на ура, результат всплывающее окно с текстом True ...
IE полон неожиданностей с визгом закричал "Error: Status:parseerror"
пляски с типом (dataType) ни к чему не приводили, снифером (вирешарком) то же всё чисто ... к примеру для типа json => ['True']
Чего не хватало?!
всё проще оказалось ... пишем по части url: "/index.php"
header("Content-Type: text/html; charset=utf-8");
print "True";
exit;
вуаля.
еще один момент не в пользу ИЕ:
.img
<style>
{
background-image:url(images.gif);
background-repeat:no-repeat;
padding-left:20px;
}
</style>
<span class='img'></span>
Опера, мозила, софари, хром: видим то что и ожидаем
IE: видим то что и ожидаем от IE, а собственно НИЧЕГО
костыль или нет, не знаю, честно копать некогда ... но работает
<span class='img'> </span>
вполне возможно что, сработает как
<style>
{
background-image:url(images.gif);
background-repeat:no-repeat;
padding-left:20px;
width: 20px;
}
</style>
24 мар. 2009 г.
PHP. SSL HTTP средствами socket'а
Цель: Отправить данные и получить ответ по SSL соединению c авторизацией на сервере из PHP скрипта.
Дано: PHP 4.4.9, OpenSSL 0.9.8j, Apache 2.0.63
Решение:
Сначала массив сведений данных для коннекта по SSL HTTPS:
Вызываем функцию для соединения:
Теперь сама функция:
Примечание:
Стоит заметить, данное решение средствами GET запроса,
для POST запроса немного подправляется и юзается не менее успешно.
Дано: PHP 4.4.9, OpenSSL 0.9.8j, Apache 2.0.63
Решение:
Сначала массив сведений данных для коннекта по SSL HTTPS:
$SSL = array ( 'Host'=>'hostssl.domen.local', # URI хоста сервера
'Port'=> 443, # Порт хоста сервера
'Path' => '/cgi-bin/', # путь к скриптам
'User' => 'login', # логин для авторизации
'Pass' => 'password' # пароль для авторизации
);
Вызываем функцию для соединения:
$options = array ( 'var1' => 'value1',
'var2' => 'value2',
'var3' => 'value3'
);
$script = 'script.cgi'; # имя скрипта на стороне сервера
$result = SendDataHTTPS($script, $options);
print $result;
Теперь сама функция:
function SendDataHTTPS($script, $options) {
if (!is_array($options)) return false;
$option='';
foreach ($options as $key=>$row) {
$option .= ($option ? "&" : "?").rawurlencode($key)."=".rawurlencode($row);
}
$sock = fsockopen("ssl://".$SSL['Host'], $SSL['Port'], $errno, $errstr, 15);
if(!$sock) {user_error("$errstr ($errno)\n", E_USER_ERROR); return false;}
fwrite($sock,"GET ".$SSL['Path'].$script.$option." HTTP/1.0\r\n");
fwrite($sock,"Host: ".$SSL['Host']."\r\n");
fwrite($sock,"Content-type: text/plain\r\n");
fwrite($sock,"Authorization: Basic ".base64_encode($SSL['User'].":".$SSL['Pass'])."\r\n");
fwrite($sock,"Connection: close\r\n\r\n");
$headers = '';
while($str = trim(fgets($sock,4096)))
$headers .= "$str\n";
$body = '';
while(!feof($sock))
$body .= @fgets($sock,4096);
fclose($sock);
return $body;
}
Примечание:
Стоит заметить, данное решение средствами GET запроса,
для POST запроса немного подправляется и юзается не менее успешно.
5 мар. 2009 г.
Менее востребованные регуляки (Regexp)
IP адрес
MAC адрес
Имя домена
Число с плавающей точкой
Римское число
Дата формата dd-MM-yyyy
\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b
MAC адрес
^([0-9a-fA-F][0-9a-fA-F]:){5}([0-9a-fA-F][0-9a-fA-F])$
Имя домена
^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6}$
Число с плавающей точкой
[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?
Римское число
^(?i:(?=[MDCLXVI])((M{0,3})((C[DM])|(D?C{0,3}))?((X[LC])|(L?XX{0,2})|L)?((I[VX])|(V?(II{0,2}))|V)?))$
Дата формата dd-MM-yyyy
(0[1-9]|[12][0-9]|3[01])([- /.])(0[1-9]|1[012])\2(19|20)\d\d
10 февр. 2009 г.
Аторизация силами Apacha и MySQL
Цель: Произвести авторизацию силами Apache и MySQL.
Дано: Apache/2.2.6, apache-mod_auth_mysql-3.0.0, PHP 4.4.1, mysqld 5.0.45
Решения:
На изучении данного момента решения данной задачи рисуется два пути.
Первый из них заключается если нет возможности поставить дополнительный модуль apache-mod_auth_mysql к Апачу , к примеру в случае хостинга у провайдера) тогда нам поможет скриптик Симдянова И.В. "Система авторизации HTTP-Basic авторизации". О нём подробно расписано всё по данной ссылке http://www.softtime.ru/info/authorization.php.
Второй путь, владельцу сервера хостинга, дополнительно поставить модуль apache-mod_auth_mysql, благо через urpmi в Mandrive вытянулось и успешно установилось. К слову, Apache после установки модуля автоматом ребутнулся, если не заметили данного обстоятельства, не забудьте это сделать вручную.
Далее проверяем наличие модуля в конфигах апача
Если нет такого результат, проверим
далее идем в каталог хоста в котором нужно осуществить авторизацию, к примеру
создадим файл .htaccess
правим его, каму как удобней, добавив строки и не забыв заменить значение некоторых из них:
localhost, DB_Name, User_Name, User_Password – параметры подключения к БД,
Table_Users - соответствует названию таблицы где лежат логины и пароли к ним,
FildNameUser – название поля логинов,
FildNamePassword - название поля паролей.
Стоит отнестись с вниманием к следующему параметру AuthMySQLPwEncryption, в данном случае пароли в БД лежат в открытом виде (не самый лучший способ, знаю, как тестовая заведена была) соответственно стоял параметр none, в случае если пароли в хэше MD5, тогда так и указываем: AuthMySQLPwEncryption md5.
Список поддерживаемых хэшей данного параметра: crypt, scrambled, md5, aes, sha1.
Вот и всё, осталось обнавить страницу в Вашем браузере и протестить. =)
Описания параметров для данного модуля можно посмотреть тут:
http://modauthmysql.sourceforge.net/CONFIGURE
После успешной авторизации, пользователь и пароль передается в глобальной переменной $_SERVER.
Создадим в той же папке index.php, добавив строки
Примечание: Остался открытым вопрос, как после успешной авторизации прервать сессию пользователя по требованию клиента …
Дано: Apache/2.2.6, apache-mod_auth_mysql-3.0.0, PHP 4.4.1, mysqld 5.0.45
Решения:
На изучении данного момента решения данной задачи рисуется два пути.
Первый из них заключается если нет возможности поставить дополнительный модуль apache-mod_auth_mysql к Апачу , к примеру в случае хостинга у провайдера) тогда нам поможет скриптик Симдянова И.В. "Система авторизации HTTP-Basic авторизации". О нём подробно расписано всё по данной ссылке http://www.softtime.ru/info/authorization.php.
Второй путь, владельцу сервера хостинга, дополнительно поставить модуль apache-mod_auth_mysql, благо через urpmi в Mandrive вытянулось и успешно установилось. К слову, Apache после установки модуля автоматом ребутнулся, если не заметили данного обстоятельства, не забудьте это сделать вручную.
Далее проверяем наличие модуля в конфигах апача
# grep mod_auth_mysql /etc/httpd/conf/httpd.conf
LoadModule
mysql_auth_module extramodules/mod_auth_mysql.so
Если нет такого результат, проверим
#ls /etc/httpd/modules.d/ grep mod_auth_mysql
xx_mod_auth_mysql.conf
далее идем в каталог хоста в котором нужно осуществить авторизацию, к примеру
#cd /var/www/hosts/host1.local/www/test
создадим файл .htaccess
#touch .htaccess
правим его, каму как удобней, добавив строки и не забыв заменить значение некоторых из них:
AuthName "Enter login and password"
AuthType Basic
AuthMYSQLAuthoritative on
AuthMySQLHost localhost
AuthMySQLDB DB_Name
AuthMySQLUser User_Name
AuthMySQLPassword User_Password
AuthMySQLUserTable Table_Users
AuthMySQLNameField FildNameUser
AuthMySQLPasswordField FildNamePassword
AuthMySQLPwEncryption none
Require valid-userlocalhost, DB_Name, User_Name, User_Password – параметры подключения к БД,
Table_Users - соответствует названию таблицы где лежат логины и пароли к ним,
FildNameUser – название поля логинов,
FildNamePassword - название поля паролей.
Стоит отнестись с вниманием к следующему параметру AuthMySQLPwEncryption, в данном случае пароли в БД лежат в открытом виде (не самый лучший способ, знаю, как тестовая заведена была) соответственно стоял параметр none, в случае если пароли в хэше MD5, тогда так и указываем: AuthMySQLPwEncryption md5.
Список поддерживаемых хэшей данного параметра: crypt, scrambled, md5, aes, sha1.
Вот и всё, осталось обнавить страницу в Вашем браузере и протестить. =)
Описания параметров для данного модуля можно посмотреть тут:
http://modauthmysql.sourceforge.net/CONFIGURE
После успешной авторизации, пользователь и пароль передается в глобальной переменной $_SERVER.
Создадим в той же папке index.php, добавив строки
Ужасно секретная страница!
Вы тут как пользуватель
<?
print $_SERVER['PHP_AUTH_USER'];
?>
Примечание: Остался открытым вопрос, как после успешной авторизации прервать сессию пользователя по требованию клиента …
Подписаться на:
Сообщения (Atom)

