PHP сообщество

любители кода :)

Вопрос

Bloged in Без рубрики от admin Пятница Август 31, 2007 at about 4:10 пп

У вас есть знакомые без высшего образования, которые сейчас успешно работают девелоперами / тим лидами / проджект менеджерами ?

CORE GRASP

Bloged in Без рубрики от admin Пятница Август 31, 2007 at about 3:03 пп

http://grasp.coresecurity.com

Недавно на горизонте появился очередной WEB-файервол, назначение которого защищать потенциально опасные выражения от эксплуатации злоумышленником. Два дня назад CORE GRASP for PHP 5.2.3 обновилось до версии 2. Сами разработчики советуют использовать его в паре с Suhosin.

Думаю, информация будет полезна, но мне пока не ясны преимущества данного, т.к связка mod_security PLUS suhosin (с SQL database user protection) делает аналогичные вещи. В тему пунка FAQ > 4. MISC > SUHOSIN & GRASP > http://grasp.coresecurity.com/index.php?m=faq.

https

Bloged in Без рубрики от admin Пятница Август 31, 2007 at about 12:10 пп

В общем суть.
Имеется один и тот же файл. mail.php. Лежащий на двух разных серверах.

содержит в себе только одну строку
mail() с правильными параметрами.

Имеется два домена. http://domen1.com и https://domen2.com соответсвенно.
так вот по https - функция не отправляет почту. Хотя ошибок никаких не дает и возвращает true.

В чем грабли?

проблема

Bloged in Без рубрики от admin Пятница Август 31, 2007 at about 12:03 пп

Обнаружили проблему:
exif_imagetype и getimagesize, если натыкается на mp3, то считывает файл целиком в память, и только потом говорит, что это не картинка. Получается очень долго.

Два вопроса - почему там не используется mmap и как правильно определять содержимое файла?

Начало работы

Bloged in Без рубрики от admin Пятница Август 31, 2007 at about 2:05 дп

Кому не сложно - набросайте тестовое задание выполнение которого было бы равнозначно приему на работу. Или небольшое задание (ну скажем на день работы) которое вы бы рискнули поручить новичку проработавшему месяца два. Что там будет, PHP\MySQL\Smarty\JS\XHTML\XML - я думаю Вам видней. Главное - максимальная реалистичность :]

Вопрос

Bloged in Без рубрики от admin Четверг Август 30, 2007 at about 7:30 пп

Возможно вопрос немного не в тему..
- Что нужно выучить, чтоб знать PHP в обьеме минимально необходимом, чтоб устроиться наработу программистом?

П.С. Спрашиваю не для себя, а для своих студентов :)

DateDiff

Bloged in Без рубрики от admin Четверг Август 30, 2007 at about 7:09 пп

Есть две даты в Unix Timestamp ( time() ). Как корректно получить разницу между двумя этими датами, причем год, месяц, дней, часов, секунд?
Простое вычитание не помогает, потому что правильно определить количество дней в месяце не так просто - одна мысль - лишь пробегать цилом по всем месяцам и там уже делить разницу секунд на кол-во секунд в этом месяце.
Может я изобретаю велосипед? PEAR и другие тулзы не предлагать, максимум - include-библиотеку.

сортировка

Bloged in Без рубрики от admin Среда Август 29, 2007 at about 4:50 пп

Есть масив который формируется так:
$arr['ddm_users'][$conval['nickname'])] = '?module=user.list&user='.$conval['username'];
Как мне его отсортировать по $conval['username'] но так как принято в виндовсе при сортировке папок (пофиг регистр, числа вначале)

ru_soundex()

Bloged in Без рубрики от admin Вторник Август 28, 2007 at about 7:07 пп

хотелось бы узнать мнение сообщества: нужна ли народу такая функция? отправить ли её на офсайт пхп?
или народу не нужны нездоровые сенсации?

<?php
# to Arthur

// (cc) me, 23/08/2007-27/08/2007

$str = “к скалам бурым”;
print
“ru_soundex($str) = “.ru_soundex($str).“<br />\r\n”;

$str = “с каламбуром”;
print
“ru_soundex($str) = “.ru_soundex($str).“<br />\r\n”;;

function ru_soundex($source)
{
$res = '';

$literal = array();
// ассоциативный массив букв
// параметры звуков гласный / согласный

// для гласных переход буквы в звук(и), редуцированный/нет, предполагаемые правила ударения исходя из кол-ва слогов (stressed syllable)
// реализована проверка предполагаемого ударения

// для согласных переход букв[ы] в звук(и), редуцируемый/нет, правила редуцирования

// vowel
$literal['А'] = array('status'=>'гласный','sound'=>'а','stressed'=>'а'); // никогда не меняется
$literal['Е'] = array('status'=>'гласный','sound'=>'и','stressed'=>'э', 'АаЕеЁёИиОоУуЭэЮюЯяЬьЫыЪъ' => 'йэ'); // - особые правила, для этой буквы, стоящей после указанных, а также в начале слов
$literal['Ё'] = array('status'=>'гласный','sound'=>'о','stressed'=>'о', 'АаЕеЁёИиОоУуЭэЮюЯяЬьЫыЪъ' => 'йо');
$literal['И'] = array('status'=>'гласный','sound'=>'и','stressed'=>'и');
$literal['О'] = array('status'=>'гласный','sound'=>'а','stressed'=>'о');
$literal['У'] = array('status'=>'гласный','sound'=>'у','stressed'=>'у');
$literal['Ы'] = array('status'=>'гласный','sound'=>'ы','stressed'=>'ы');
$literal['Э'] = array('status'=>'гласный','sound'=>'э','stressed'=>'э');
$literal['Ю'] = array('status'=>'гласный','sound'=>'у','stressed'=>'у', 'АаЕеЁёИиОоУуЭэЮюЯяЬьЫыЪъ' => 'йу');
$literal['Я'] = array('status'=>'гласный','sound'=>'а','stressed'=>'а', 'АаЕеЁёИиОоУуЭэЮюЯяЬьЫыЪъ' => 'йа'); // заяц произносится как [зайец]
$v_pattern = 'АаЕеЁёИиОоУуЭэЮюЯяЬьЫыЪъ';

// кстати, надо добавить выкусывание гласных из концов слов, заканчивающихся на согласный-гласный-звонкий согласный (-ром, -лем, итд) гласная очень часто сглатывается
// зы: это здесь не реализовано %)
// проверено: soundex и сам с этим неплохо справляется

// звонкие согласные редуцируются при удвоении.
// звонкие согласные переходят в парный глухой перед глухим
// глухие редуцируются полностью перед глухими.

// consonant
// в отличие от гласных, для согласных условие “стоит перед указанной или в конце слова”
$literal['Б'] = array('status'=>'согласный','sound'=>'б', 'КкПпСсТтФфХхЦцЧчШшЩщ' => 'п');
$literal['В'] = array('status'=>'согласный','sound'=>'в', 'КкПпСсТтФфХхЦцЧчШшЩщ' => 'ф');
$literal['Г'] = array('status'=>'согласный','sound'=>'Г', 'КкПпСсТтФфХхЦцЧчШшЩщ' => 'к');
$literal['Д'] = array('status'=>'согласный','sound'=>'д', 'КкПпСсТтФфХхЦцЧчШшЩщ' => 'т');
$literal['Ж'] = array('status'=>'согласный','sound'=>'ж', 'КкПпСсТтФфХхЦцЧчШшЩщ' => 'ш');
$literal['З'] = array('status'=>'согласный','sound'=>'з', 'КкПпСсТтФфХхЦцЧчШшЩщ' => 'с');
$literal['Й'] = array('status'=>'согласный','sound'=>'й');
$literal['К'] = array('status'=>'согласный','sound'=>'к', 'КкПпСсТтФфХхЦцЧчШшЩщ' => '');
$literal['Л'] = array('status'=>'согласный','sound'=>'л');
$literal['М'] = array('status'=>'согласный','sound'=>'м');
$literal['Н'] = array('status'=>'согласный','sound'=>'н');
$literal['П'] = array('status'=>'согласный','sound'=>'п', 'КкПпСсТтФфХхЦцЧчШшЩщ' => '');
$literal['Р'] = array('status'=>'согласный','sound'=>'р');
$literal['С'] = array('status'=>'согласный','sound'=>'с'); // а вот С не хочет редуцироваться, на первый взгляд…
$literal['Т'] = array('status'=>'согласный','sound'=>'т', 'КкПпСсТтФфХхЦцЧчШшЩщ' => '');
$literal['Ф'] = array('status'=>'согласный','sound'=>'ф', 'КкПпСсТтФфХхЦцЧчШшЩщ' => ''); // спорно
$literal['Х'] = array('status'=>'согласный','sound'=>'х');
$literal['Ц'] = array('status'=>'согласный','sound'=>'ц');
$literal['Ч'] = array('status'=>'согласный','sound'=>'чь'); // всегда мягкий
$literal['Ш'] = array('status'=>'согласный','sound'=>'ш');
$literal['Щ'] = array('status'=>'согласный','sound'=>'щь');

// спецсимволы
$literal['Ъ'] = array('status'=>'знак','sound'=>' '); // только разделительный. делит жёстко
$literal['Ь'] = array('status'=>'знак','sound'=>'ь'); // даже если делит, то мягко

$literal['ТС'] = array('status'=>'сочетание','sound'=>'ц');
$literal['ТЬС'] = $literal['ТС'];
$literal['ШЬ'] = array('status'=>'сочетание','sound'=>'ш'); // всегда твёрдый. и это не единстенный рудимент языка

$literal['СОЛНЦ'] = array('status'=>'сочетание','sound'=>'сонц');
$literal['ЯИЧНИЦ'] = array('status'=>'сочетание','sound'=>'еишниц');
$literal['КОНЕЧНО'] = array('status'=>'сочетание','sound'=>'канешно');
$literal['ЧТО'] = array('status'=>'сочетание','sound'=>'што');
$literal['ЗАЯ'] = array('status'=>'сочетание','sound'=>'зайэ'); // да-да. не только [зайэц], но и [зайэвльэнийэ]

$sound = str_to_upper($source);

// сначала сочетания
foreach( array_filter($literal,
create_function('$item','if( $item[”status”] === “сочетание”) return true; return false;'))
as
$sign => $translate )
$sound = str_replace($sign,$translate[“sound”],$sound);

// потом знаки
foreach( array_filter($literal,
create_function('$item','if( $item[”status”] === “знак”) return true; return false;'))
as
$sign => $voice )
$sound = str_replace($sign,$translate[“sound”],$sound);

// разделяем на слова, определяем кол-во слогов, заменяем ударный/безударный гласный (единственный или предполагая второй в двух-трёхсложном слове, предпредпоследний - в остальных)

$words = preg_split('~[,.\~`1234567890-=\~!@#$%^&*()_+|{}\]\];:\'”<>/? ]~', $sound, -1, PREG_SPLIT_NO_EMPTY);

// гласные
foreach( array_filter($literal,
create_function('$item','if( $item[”status”] === “гласный”) return true; return false;'))
as
$sign => $translate )
{
// для каждого слова
foreach( $words as &$word )
{
// кол-во гласных
$vowel = preg_match_all(“~[$v_pattern]~”, $word, $del_me );
// готовим
$cur_pos = 0;
$cur_vowel = 0;
while(
false !== $cur_pos = strpos($word,$sign,$cur_pos) )
{
$cur_vowel++;
// print $cur_pos.' = '.$sound[$cur_pos].”<br />\r\n”;
if( sizeof($translate)==4 && ($cur_pos === 0 || strpos( $v_pattern , $word[$cur_pos-1] )))
{
$word = substr_replace($word,$translate[$v_pattern],$cur_pos,1);
}
elseif(
1 == $vowel )
$word = substr_replace($word,$translate[“stressed”],$cur_pos,1); //
elseif( 2 == $vowel && 1 == $cur_vowel )
$word = substr_replace($word,$translate[“stressed”],$cur_pos,1); // предполагаем, что в двухсложных словах первый слог ударный
elseif( 3 <= $vowel && $cur_vowel == $vowel - 2 )
$word = substr_replace($word,$translate[“stressed”],$cur_pos,1); // предполагаем, что слог ударный предпредпоследний
else
$word = substr_replace($word,$translate[“sound”],$cur_pos,1);
$cur_pos++;
}
}
}

$sound = implode( $words, ' ' ); // клеим обратно

// согласные
foreach( array_filter($literal,
create_function('$item','if( $item[”status”] === “согласный”) return true; return false;'))
as
$sign => $translate )
{
// готовим
$cur_pos = 0;
while(
false !== $cur_pos = strpos($sound,$sign,$cur_pos) )
{
// print $cur_pos.' = '.$sound[$cur_pos].”<br />\r\n”;
if( sizeof($translate)==3 )
{
$x = array_pop(array_keys($translate)); // снимаем третий элемент
if( strpos( $x, $sound[$cur_pos+1] ) || $cur_pos === strlen($sound) )
{
$sound = substr_replace($sound,$translate[$x],$cur_pos,1);
} elseif (
$sound[$cur_pos] === $sound[$cur_pos+1] )
$sound = substr_replace($sound,$translate[“sound”],$cur_pos,2); // все двойные редуцируются
else
$sound = substr_replace($sound,$translate[“sound”],$cur_pos,1);

} else
{
$sound = substr_replace($sound,$translate[“sound”],$cur_pos,1);
}

$cur_pos++;
}
}
// алес. фонемы привели к одному виду
// дальше используем любой алгоритм для вычисления числового эквивалента

// но остаётся сомнение. очень хочется расстаться с глухими предлогами перед глухими согласными (”к скалам”)

$sound = preg_replace('~[,.\~`1234567890-=\~!@#$%^&*()_+|{}\]\];:\'”<>/? ]~','',$sound) ;

// print $sound;
// print str_to_translit($sound);
// print soundex(str_to_translit($sound));

$res = str_to_upper($source[0]).substr(soundex(str_to_translit($sound)),1);

return $res;
}

// (c) http://ru2.php.net/manual/en/function.strtoupper.php#74574
//Russian
function str_to_upper($str){
return
strtr($str,
“abcdefghijklmnopqrstuvwxyz”.
“\xE0\xE1\xE2\xE3\xE4\xE5″.
“\xb8\xe6\xe7\xe8\xe9\xea”.
“\xeb\xeC\xeD\xeE\xeF\xf0″.
“\xf1\xf2\xf3\xf4\xf5\xf6″.
“\xf7\xf8\xf9\xfA\xfB\xfC”.
“\xfD\xfE\xfF”,
“ABCDEFGHIJKLMNOPQRSTUVWXYZ”.
“\xC0\xC1\xC2\xC3\xC4\xC5″.
“\xA8\xC6\xC7\xC8\xC9\xCA”.
“\xCB\xCC\xCD\xCE\xCF\xD0″.
“\xD1\xD2\xD3\xD4\xD5\xD6″.
“\xD7\xD8\xD9\xDA\xDB\xDC”.
“\xDD\xDE\xDF”);
}

function str_to_translit($str){
return
strtr($str,
“abcdefghijklmnopqrstuvwxyz”.
“\xE0\xE1\xE2\xE3\xE4\xE5″.
“\xb8\xe6\xe7\xe8\xe9\xea”.
“\xeb\xeC\xeD\xeE\xeF\xf0″.
“\xf1\xf2\xf3\xf4\xf5\xf6″.
“\xf7\xf8\xf9\xfA\xfB\xfC”.
“\xfD\xfE\xfF”,
“abcdefghijklmnopqrstuvwxyz”.
“abvgde”.
“?*ziik”.
“lmnopr”.
“stufhc”.
“4ww\”y`”.
“eua”);
}
?>

upd: ps: хотелось бы отметить, что приведённый код служит, скорее, для иллюстрации алгоритма, чем для применения на практике. практическую реализацию можно сделать в другой форме

спасибо.

запустить BAT файл или PHP скрипт с командной строки.

Bloged in Без рубрики от admin Вторник Август 28, 2007 at about 2:14 пп

Имеется PHP-Demon Server который запускать  хотелось бы из командной строки , Так как он имеет внутри бесконечный while.

Я запускал и останавливал его через удалённый рабочий стол bat файлы… внутри bat-файла был путь к PHP.exe и моему скрипту, он запускался.

Вот хотел бы спроситт как мне можно запускать bat файл из броузера на удалённой машине или какуюто альтернативу применить?

cms datalife engine - dle - для Украины; Подмосковье санаторий Озеро Белое