PHP сообщество

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

Производительность PHP+IIS+Oracle

Bloged in Без рубрики от admin Пятница Май 18, 2007 at about 11:35 дп

Установлено следующее:
На машине1 (3ГГц Dual Core, 1GB RAM) с Windows XP SP2:
- IIS
- PHP Version 5.1.2 как ISAPI модуль к IIS
- Oracle 9 Client, подружен с PHP
На машине2 (2.8ГГц, 512Mb RAM) с Windows 2003 Server Enterprise Edition SP1:
- Oracle 9 Enterprise Edition

На машине1 выполняется весьма ресурсоёмкий PHP скрипт вывода графика, который открывает курсор в Oracle, последовательно вытягивает около 10000 строк данных при помощи ocifetchinto.


Собственно, кусок кода вот, если нужно:

while($ARow = db_fetch_row($result))
{
if ($direction == 0) // forward direction
{
$from_value = $ARow[0];
$to_value = $ARow[1];
}
else // reverse direction
{
$from_value = $ARow[1];
$to_value = $ARow[0];
}

if ($from_value == $from_menuid && in_array($to_value, $c_menuid))
{
$event_val = $ARow[2];
$color = DBColor2RGBArray($plot_colours[$to_value]);

$s_time = $ARow[3];
// convert sql time to unix
$time_parts = explode(”-”, $s_time);
$event_time = mktime((integer)$time_parts[3], (integer)$time_parts[4], (integer)$time_parts[5], (integer)$time_parts[1], (integer)$time_parts[2], (integer)$time_parts[0]);

$shift1 = (integer)array_search($to_value, $c_menuid);

$event_time = date_adjust_DST($from_time, $event_time);
//calc the difference in days (event_time - from_time)

$diff_hours=hours_diff($from_time, $event_time);
//calc the difference in days (event_time - from_time)
$diff_hours=hours_diff($from_time, $event_time);
$bar_x = ($diff_hours * $c_menuid_count + $shift1) * $LgX;
// calc bar height
$bar_y = $plot_Ln * $event_val;

imagefilledrectangle($im, $plot_Ox + $bar_x, $plot_Oy, $plot_Ox+$bar_x+$LgX, $plot_Oy - $bar_y, imagecolorallocatealpha($im, $color[0], $color[1], $color[2], C_GFX_FILLTRANSPARENCY));
imagerectangle ($im, $plot_Ox + $bar_x, $plot_Oy, $plot_Ox+$bar_x+$LgX, $plot_Oy - $bar_y, $black);

}
}

Скрипт выполняется довольно долгое время: 10-15 секунд. Хотя, если ставить метки в начале и в конце скрипта, PHP на его выполнение тратит всего 4 секунды.
Я проанализировал трафик при помощи WireShark (Ethereal), и увидел, что все 10 секунд по сети передаются данные с машины2 на машину1. Скрипт просто медленно вытягивает данные из БД, при том, что средняя загрузка ЦП на обеих машинах не превышает 10%, память почти не растёт, и занята на уровне 40-50% RAM. Загрузка сети - 8%. Как только график заканчивает строиться, загрузка падает. Это данные из Task Manager.
Во время выполнения, на машине1, процессорное время максимальное у inetinfo (процесс IIS).

Подскажите пожалуйста, где здесь может быть узкое место. Возможно ли связке PHP+ISS выделить больше системных ресурсов с целью ускорения выполнения скрипта? Скрипт выполняется на небольшом объеме тестовых данных, а в реальной жизни время выполнения может быть порядка 2х минут. :(

midi & php

Bloged in Без рубрики от admin Пятница Май 18, 2007 at about 3:49 дп

Есть ли средства и процедуры для работы с форматом midi на php? Если есть - глупо изобретать велосипед.

Хочется сделать одну прикольную штуку, но для этого надо распарсить файл(ы) *.mid чтобы обработать, а затем зашпаклевать обратно и выдать опять в качестве файла mid.

PS: Кстати, заодно: существует ли простой флэш-проигрыватель, которому можно указать mid в качестве урл?

flash + php

Bloged in Без рубрики от admin Четверг Май 17, 2007 at about 7:16 пп

Здравствуйте, подскажите пожалуйста спец. литературу где подробно рассматривается flash + php :)

Вывод еженедельных отчетов

Bloged in Без рубрики от admin Четверг Май 17, 2007 at about 7:15 пп

Имеем: PHP 5.2.1, PostgreSQL 8.1.4.
Есть таблица в БД, в ней куча полей среди которых поле date (тип timestamp).
Эта таблица постепенно заполняется и моя задача сделать распечатку еженедельных отчетов, суть проблемы в выводе именно _еженедельной_ информации из БД, на уровне БД у меня реализация в псевдокоде такая:

SELECT * FROM t_ind_journal WHERE EXTRACT(week FROM t_ind_journal.date) = $week

Для удобства юзеру я выдаю форму, на которой он должен выбрать год, месяц и _номер недели в данном месяце_. БД умеет считать только номер недели в году. Почитав ISO-8601 выяснилось, что не так то просто все это посчитать и вывести отчет :) Переменная $week должна содержать в себе по сути номер недели в году для того, чтобы условие выполнилось, подскажите как мне его посчитать имея месяц, год и _номер недели в месяце_? Возможно я не с той стороны подошел к решению задачи?

Авторизация

Bloged in Без рубрики от admin Четверг Май 17, 2007 at about 6:49 пп

Вопрос в следующем:
При авторизации на сайт, ставлю счетчик на кол-во попыток.
Если их было более N раз, то хочу не впускать пользователя на 15 минут.
Как это правильно реализовать – хранить в БД ip или делать с помощью cookie.
Естественно делается это для защиты от сервера, на котором будет стоять программа перебора паролей.
Вопрос скорее вот в чем - если делать с помощью cookie, то программе с сервера можно как-то всучить cookie или они сохраняются только на простых компьютерах?
Заранее благодарен за ответ!

Академическая задача

Bloged in Без рубрики от admin Четверг Май 17, 2007 at about 3:00 пп

А не научат меня здесь самому красивому методу получения последнего элемента массива (индексы числа). А то надоело писать $arr[count($arr)-1], а current(end($arr)) не так что бы совсем уж понятно. Свою функцию писать не хочется.

P.S. array_pop - не подходит ибо массив должен остаться целым

UPD: Вопрос решен, сам протормозил про end().

Преобразование времени time()

Bloged in Без рубрики от admin Среда Май 16, 2007 at about 7:33 пп

Как корректно преобразовать текущее время, полученное с помощью TIME().

Защита почтового скрипта от взлома

Bloged in Без рубрики от admin Среда Май 16, 2007 at about 5:05 пп

Есть скрипт для отсылки почты из формы на сайте (приведен ниже). Я вовсе не асс программирования и прошу помощи: посоветуйте, что сделать в плане безопасности (от взлома сайта). Действия против спамеров почитаю в предыдущем посте:)). Спасибо.

Пример формы:


<FORM NAME=”formname” METHOD=POST ACTION=”form.php”> <!– to actionfile for the script –>

<!–form, make one as pleased with own fields and variables below…. –>

<INPUT TYPE=TEXT NAME=”name” SIZE=15> name <BR><BR>

<INPUT TYPE=TEXT NAME=”adress” SIZE=15> adress<BR><BR>

<INPUT TYPE=TEXT NAME=”email” SIZE=15> email adress<BR><BR>

additional text<br>

<TEXTAREA NAME=”textfield” WRAP=”physical” COLS=”25″ ROWS=”6″></TEXTAREA><BR><BR>

<!–COPY below to your form (or use this one)–>

<!–params below must be used –>

<INPUT TYPE=HIDDEN NAME=F_FROM VALUE=”Name Of Website”> <!–from- line for email –>

<INPUT TYPE=HIDDEN NAME=F_TO VALUE=”yourname@domain.com”> <!–to- line for email: your/owner website adress –>

<INPUT TYPE=HIDDEN NAME=F_SUBJECT VALUE=”This is the subject”> <!–subject- line for email –>

<INPUT TYPE=HIDDEN NAME=F_TEMPLATE VALUE=”template.txt”> <!–template file location –>

<INPUT TYPE=HIDDEN NAME=F_TEMPLATE2 VALUE=”template2.txt”> <!–OPTIONAL: (otherwise leave empty) template2 file location (return sender (acknowledgement) only: works when the sender has filled in his email adress )–>

<INPUT TYPE=HIDDEN NAME=F_SENT VALUE=”sent_ok.html”> <!–form to go to after successfully sending the form–>

<INPUT TYPE=HIDDEN NAME=F_NOTSENT VALUE=”sent_notok.html”> <!–form to go to after errors with sending the form–>

<!–END-COPY –>

 <INPUT TYPE=SUBMIT VALUE=” send it “>

 Собственно сам скрипт:

<?php

 function file2go2($url){ print “<html>\n<head>\n<meta http-equiv=\”refresh\” content=\”0;URL=$url\”>\n</head>\n</html>“; exit; }

 if(!@fopen($F_TEMPLATE, “r”)) file2go2($F_NOTSENT);

else $arr_t1 = @file( $F_TEMPLATE ); $nr_mail = 1;

if (! $F_TEMPLATE2 == “” && !@fopen($F_TEMPLATE2, “r”)) file2go2($F_NOTSENT);

if (! $F_TEMPLATE2 == “” && @fopen($F_TEMPLATE2, “r”)) $arr_t2 = @file( $F_TEMPLATE2 ); $nr_mail = 2;

$domail = 1;

while ($domail <= $nr_mail):

if ($domail == 1) $var2use = $arr_t1; else $var2use = $arr_t2;

for ($index = 0; $index < count($var2use); $index++)

{

$pattern = ereg(”\{\{[A-z0-9_]*\}\}”, $var2use[$index]);

if ($pattern)

{

$line = ereg_replace(”\{\{”,”$”,$var2use[$index]);

$line = ereg_replace(”\}\}”,”",$line);

}

else

{

$line = $var2use[$index];

}

$line = addslashes($line) . “<br>”;

eval( “\$line = \”$line\”;” );

if ($index == 0 && $domail == 1) $linetot1 = $line;

elseif ($index > 0 && $domail == 1) $linetot1 .= $line;

if ($index == 0 && $domail == 2) $linetot2 = $line;

elseif ($index > 0 && $domail == 2) $linetot2 .= $line;

}

++$domail;

 endwhile;

 //the next line will email the template to $F_TO of your form (normally yourself c.q. the owner of website

$mailit1 = @mail($F_TO, $F_SUBJECT, $linetot1, “From: $F_FROM \nMime-Version: 1.0\nContent-Type: text/html; charset=ISO-8859-1\nContent-Transfer-Encoding: 7bit”);

//the next line will email the sender: change the $email to the variable of your form (the email adress of the visitor)

//only do this when you want 2 templates emailed.

if ($nr_mail == 2) $mailit2 = @mail($email, $F_SUBJECT, $linetot2, “From: $F_FROM\nMime-Version: 1.0\nContent-Type: text/html; charset=ISO-8859-1\nContent-Transfer-Encoding: 7bit”);

 

if ($mailit1 = true) $sent = 1;

else $sent = 0;

if ($mailit2 = true) $sent = 2;

else $sent = 0;

 
if ($nr_mail == 1 && $sent == 1) file2go2($F_SENT);

if ($nr_mail == 1 && $sent == 0) file2go2($F_NOTSENT);

if ($nr_mail == 2 && $sent == 2) file2go2($F_SENT);

if ($nr_mail == 2 && $sent == 0) file2go2($F_NOTSENT);

 ?>

И пример файла-шаблона template.txt (аналогичный template2.txt):

This is template 1 (standard) example:

From       : {{F_FROM}}
To         : {{F_TO}}
Subject    : {{F_SUBJECT}}

Your name is {{name}}

Your adress is {{adress}}

You email adress is {{email}}

The additional text you entered on our website:
{{textfield}}

————————————–
click <a href=”
http://www.disney.com”>here</a> to visit the disney site

(just an example that it also supports HTML syntax)…..

Защита от спамеров

Bloged in Без рубрики от admin Среда Май 16, 2007 at about 3:24 пп

Есть у меня на сайте скрипты, которые обрабатывают контактные формы. Т.е. на странице форма с полями “Ваш mail”, “Ваш номер ICQ” и поле для текста. Соотвественно всё это обрабатывает скрипт, который проверяет, чтобы они были не пустыми (if $var == “” …) и отсылает их мне простейшей функций $mail();
Спамеры же, в качестве тела самого сообщения (а судя по всему и других переменных, соотвествующих полям “Ваш мэйл”, “Ваш номер ICQ”) запихивают всякие свои поля subject, а также добавляют bbc, cc. Только сегодня за ночь файл dead.letter на сервере стал 3.5 мегабайта, после чего меня хостер вырубил.
Есть какие-нибудь простые варианты защиты от этого беспредела?
Я думаю сделать substr (или как там обрезание строки) до 20-ти символов - врядли смогут запихнуть в 20 символов туда что-нибудь “нелегальное”.
Знакомый ещё предложил из всех переменных убрать символ “\n”

Использование PHP в 1Cv8

Bloged in Без рубрики от admin Среда Май 16, 2007 at about 11:54 дп

хочу в 8ке использовать функции пхп. Я так понимаю реализовать это можно через COM?
Подскажите каким образом.

Первое с чем столкнулся, как зарегистрировать пхп в win xp как dcom.

—————————————-————————————-

Если кому интересно - прикрутил пхп к 1С,
работает как WBS скрипт.

установка - качаем дистрибутив http://snaps.php.net/

дистрибутив PHP5 и для данной версии http://pecl4win.php.net/ext.php/php5activescript.dll

из дистрибутива нам нужна 1 dll'ka - php5ts.dll
копируем ее в x:\windows\system32\

Теперь регистрируем php5activescript.dll (пуск - выполнить - regsvr32 x:\windows\system32\php5activescript.dll)

после этих действий мы можем писать в системе на пхп :)

To test if ActiveScript is working, create a new file, named test.wsf (the extension is very important) and type:

< job id=”test”>

< script language=”PHPScript”>
$WScript->Echo(”Hello World!”);
</script>

</job>

а так же можно и в 1С:

ScrptCtrl = Новый COMОбъект(”MSScriptControl.ScriptControl”);
ScrptCtrl.Language = “PHPScript”;
ScrptCtrl.AddCode(”
|function new_md5 (){return md5(123);}”);
res = ScrptCtrl.Run(”new_md5″);

Сообщить(res);

sqd.ru - фильмы скачать бесплатно рецензии, обзоры; био топливо; продажа стабилизаторов Rucelf; Купить смартфон Стиральные машины коммуникатор htc.