Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Полезные (интересные и оригинальные) решения

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Открыть новую тему     Написать ответ в эту тему

SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Начну:

Код:
 
  function err_handler ($errno, $errstr, $errfile, $errline) {
    global $display_errors;
    if(($errno != E_NOTICE && $errno != E_WARNING) && $display_errors){
      echo '';
    }
  }
  $error_flags = E_ALL & ~E_NOTICE;
  @error_reporting($error_flags);
  @ini_set ('error_reporting', $error_flags);
  $old_error_handler = set_error_handler("err_handler");
 

 
Бывает полезным, убивает все нотайсы, выводы ошибок и прочее.
 
ЗЫ: Желательно прикрепить.



Публикуем решения, а не задаем вопросы!
Тех же, кто этого не понимает, будем БАНИТЬ!  
Тема именно для уникальных, оригинальных и красивых решений. Если ты только взялся изучать php - не стоит сюда писать, так как, заведомо, у тебя не будет такого решения
 
ps: выделил специально для тех, у кого проблемы со зрением.





Цитата:
ЗЫ: Желательно прикрепить.
В ПМ по этому поводу писать надо. — Svarga.

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 07:30 26-07-2004 | Исправлено: Cheery, 16:57 25-03-2007
Maxer



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KADABRA
Очень помогло! Теперь не надо распакововать файлы, а сразу можно закачивать .zip'ом. Может граф. интерфейс приделаешь?

----------
красный феррари

Всего записей: 5225 | Зарегистр. 04-05-2004 | Отправлено: 18:09 08-11-2004
KADABRA



Великий покусатель
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maxer

Цитата:
Очень помогло! Теперь не надо распакововать файлы, а сразу можно закачивать .zip'ом. Может граф. интерфейс приделаешь?

Может потом.
All
Похоже пора шапку проектировать

----------
Это не подпись.

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 18:16 08-11-2004 | Исправлено: KADABRA, 18:16 08-11-2004
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
есть вопросик.. может немножко не в тему, так что заранее извините.
Итак, проблема с модулями из PHP, почему-то половина не грузится... т.е. при старте сервера (Apache) появляется ошибка а-ля Error loadin moudle - ".../php_....dll" - не могу загрузить указанный модуль. Причем не грузится примерна половина модулей, т.е. что-то грузится, а что-то нет, несмотря на то, что они все лежат в одном и том же месте.
А если поконкретнее - мне нужен модуль php_exif.dll на PHP 5.0.2, Apache - 2.0.46

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 00:13 14-11-2004
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Начни с того, что выкинь Apache 2.0 на помойку, поскольку связка Apache2+PHP врядли когда нибудь избавиться от экспериментальности. Как устанавливать тот или иной модуль - написано в соответствующем разделе мана (иногда бывают особенности для юзверей виндовс).
И вообще, какого лешего ты полез в этот топик, который к твоему вопросу отношения не имеет? Создал бы новый...

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 01:24 14-11-2004 | Исправлено: SiMM, 01:25 14-11-2004
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
а... да... чуть не забыл... все это стоит под Windows.
А если не выкидывать Apache 2, а все так попытаться настроить то, что есть?

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 09:46 14-11-2004
Pleshkov



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
G_Drey_V
а файл php_exif.dll точно существует???
Если надо, напиши мне на support[at]problem-net.com или pleshkov[at]bk.ru ([at] поменять на @) вышлю модуль, у меня есть ..... Если файл php_exif.dll существует, вышли мне на мыло свой конфиг php.ini

----------
С уважением, Павел

Всего записей: 452 | Зарегистр. 15-06-2004 | Отправлено: 23:35 15-11-2004
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
написал... заранее спасибо

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 23:42 15-11-2004
sket4



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А Может сюда в тему еще добавить скриптов взаимодействия с различными софтинами, типа совмещения авторизации на форуме и сайте, и взаимодействия и другими "девайсами" в вебе как никак облегчение работы и новая инфа,
а так тема - супер, продолжать в том же духе

Всего записей: 712 | Зарегистр. 07-05-2004 | Отправлено: 21:35 24-11-2004
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
[offtop]

Цитата:
А Может сюда в тему еще добавить скриптов взаимодействия с различными софтинами, типа совмещения авторизации на форуме и сайте

 
Сколько разных форумов... сколько разных сайтов... Кроме того, за этим надо или в категорию о CMS'ках идти или в категорию о форумах...
И с такими готовыми скриптами - лучше туда обращаться... Пользы людям будет больше... Тут "Веб-программирование" все-таки, а не поиск/дележ скриптов...
[/offtop]

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 01:32 26-11-2004
El Desperado

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Классик для мониторинга времени на парсинге php.
 

Код:

class timer {
 
``var $start;
``var $stop;
 
``function start() {
````$t = gettimeofday();
````$this->start = $t['sec'] * 1000000.0 + $t['usec'];
``}
 
``function stop() {
````$t = gettimeofday();
````$this->stop = $t['sec'] * 1000000.0 + $t['usec'];
``}
 
``function show() {
````if (!isset($this->stop)) $this->stop();  
````$elaps = ($this->stop - $this->start) / 1000000.0;
````if ($elaps < 0.0001) {
``````$elaps = "< 0.0001";
````} else {
``````$elaps = round($elaps, 4);
``````$elaps = number_format($elaps, 4);
````}
````return $elaps . " s.";
 
``}
}
 
// Сразу после создания класса запускаем главный таймер сайта
$mainTimer = new timer;
$mainTimer->start();
 

 
потом чтобы вывести только что созданный таймер где-нибудь в конце:

Код:

echo $mainTimer->show();
 

 
Можно сначала остановить (->stop()) а потом вывести когда надо (->show()).
Чтобы создать другой таймер (если ты вообще не знаешь что такое класс то ты будешь читать дальше ,)):

Код:

//СОздание
$htmlParse = new timer;
//Начало отсчёта
$htmlParse->start();
//остановка, можно упустить если выводить таймер надо будет сразу после остановки
$htmlParse->stop();
//вывод результата
echo $htmlParse->show();
 

 
Спасибо за внимание .). Эх.. когда-то это был мой первый класс на php.. ностальгия, чёрт.

Всего записей: 73 | Зарегистр. 13-12-2004 | Отправлено: 05:49 14-12-2004 | Исправлено: El Desperado, 10:59 16-12-2004
Yamb



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Дайте ссылку на класс который бы сам формировал таблицы из SQL запросов, этот бы подошел http://www.phpclasses.org/browse/package/2052.html но phpclasses.org как обычно в дауне...
 
Добавлено:
Сорри, нашел сам.
 

Код:
 
class swemc
{
  var $aResult = array();
  var $iConnID;
  var $strHost;
  var $strUser;
  var $strPass;
  var $strDb;
  var $iFields;
  var $iRecs;
  var $aFieldNames = array();
  var $aTdwidth    = array();
  var $bDebug = FALSE;
 
 function swemc ()
 {
    define ("MYSQLHOST","localhost");
    define ("MYSQLUSER","root");
    define ("MYSQLPASS","");
    define ("MYSQLDB","reloader");
    $this->strHost =  MYSQLHOST;
    $this->strUser =  MYSQLUSER;
    $this->strPass =  MYSQLPASS;
    $this->strDb   =  MYSQLDB;
 
    $this->iFields      = 0;
    $this->iRecs        = 0;
    $this->bDebug = FALSE;
 
    return  ($this->connect()) ;
 }
 
 
 function connect()
 {
    $this->iConnID=@mysql_connect($this->strHost, $this->strUser, $this->strPass);
    if ($this->iConnID)
    {
            if (@mysql_select_db($this->db))
               return $this->iConnID;
else
{
                if ($this->bDebug == TRUE)
   $this->printerror();
   return FALSE;
}
 
    }
    else
{
 if ($this->bDebug == TRUE)
    $this->printerror();
      return FALSE;
}
 
  }  
 
  function disconnect()
  {
     $this->free_result();
if ( @MYSQL_CLOSE($this->iConnID))
   $this->iConnID = FALSE;
  }
 
 
 function query($querystring)
 {
     if (!$this->iConnID)
    die("No connection to mySql<br>");
$this->aResult = mysql_db_query($this->strDb,$querystring,$this->iConnID);
     if ( !$this->aResult)
     {
         if ($this->bDebug == TRUE)
   $this->printerror(1); // print the errmsg and exit
 
     }
 
     if ( eregi("select",$querystring))
     {
        $this->iRecs   = @mysql_num_rows($this->aResult);
$this->iFields = @mysql_num_fields($this->aResult);
 
// get the field-names
for($x=0;$x<$this->iFields;$x++)
         {
            $this->aFieldNames[$x] = @mysql_field_name($this->aResult,$x);
         }
return $this->iRecs;
     }
elseif ( eregi("insert",$querystring))
{
          return mysql_insert_id($this->iConnID);
}
else
{
 
return ( mysql_affected_rows($this->iConnID));
}
 }
 
 
 function td_width($width_array)
 {
    $x = count($width_array);
    if ($x != $this->iFields)
{
        if ($this->bDebug)
{
   echo "incorrect number in width-array<br>";
   echo " $x in array, $this->iFields in record";
  }
return;
}
    for ($i = 0; $i < $x; $i++)
        $this->aTdwidth[$i] = $width_array[$i];
 }
 
 
 
function tab_out($with_table_head,$css_class="noCSS" )
{
 
   if (count($this->aTdwidth))  // are there width-values ?
       $bWidth = TRUE;
   else
       $bWidth = FALSE;
   echo "<table  border='1'";
   if ($css_class != "noCSS")
       echo "class=\"$css_class\" ";
   echo ">";
 
   if ( $with_table_head == TRUE )
   {
      echo "<tr class=\"$css_class\">";
      for ($i=0;$i<$this->iFields;$i++)
      {
         if ($bWidth == TRUE)
             $width = $this->aTdwidth[$i];
         else
             $width = 100/$this->iFields."%";
         echo "<th  class=\"$css_class\" width=\"$width\">";
         echo ucfirst($this->aFieldNames[$i]);
         echo "</th>";
      }
      echo "</tr>";
   }
 
   for ($j = 0; $j < $this->iRecs; $j++)
   {
       echo "<tr class=\"$css_class\">";
       for ($k=0;$k<$this->iFields;$k++)
       {
           if ($bWidth == TRUE)
              $width = $this->aTdwidth[$k];
           else
              $width = 100/$this->iFields."%";
           echo "<td width=\"$width\" class=\"$css_class\">";
  $xtmp = mysql_result($this->aResult,$j,$k);
  if (strlen($xtmp))
     echo $xtmp;
  else
     echo"&nbsp;";
           echo  "</td>";
        }
        echo "</tr>";
  }
 
echo "</table>";
}
 
 
function tb_tab_out($css_class="standard", $width="80%")
{
 
   if (count($this->aTdwidth))
       $arr_breiten = TRUE;
   echo "<p class=\"center\"><table class=\"$css_class\" width='$width' align='center'>";
      echo "<tr>";
 
         for ($i=0;$i<$this->iFields;$i++)
         {
             if ($arr_breiten)
                $width = $this->aTdwidth[$i];
             else
             $width = 100/$this->iFields."%";
 
             echo "<th width=\"".$width."\">";
             echo      strtoupper($this->aFieldNames[$i]);
             echo "</th>";
         }
 
 
      echo "</tr>";
 
 
 for ($j = 0; $j < $this->iRecs; $j++)
      {
            echo "<tr>";
$l=0;
            for ($k=0;$k<$this->iFields-1;$k++)
            {
                   if ($arr_breiten)
                       $width = $this->aTdwidth[$k];
                   else
                       $width = 100/$this->iFields."%";
                   echo "<td width=\"".$width."\">";
  $xtmp = mysql_result($this->aResult,$j,$k);
  if (strlen($xtmp))
     echo $xtmp;
      else
     echo"&nbsp;";
 
                    echo  "</td>";
$l=$k+1;
            }
                   if ($arr_breiten)
                       $width = $this->aTdwidth[$k];
                   else
                       $width = 100/$this->iFields."%";
                   echo "<td width=\"".$width."\">";
  $xtmp = mysql_result($this->aResult,$j,$l);
                   $param = "detail";
  $paramwert = $xtmp;
  $act_url = "detail.php";
  if (strlen($xtmp))
     echo postButton("Ansehen",$act_url,$param,$paramwert);
      else
     echo"&nbsp;";
 
                    echo  "</td>";
            echo "</tr>";
      }
 
echo "</table></p>";
}
 
 
function fetch_field($recno,$fieldno_or_fieldname)
{
   return  mysql_result($this->aResult,$recno,$fieldno_or_fieldname);
}
 
function fetch_record($recno,$arr_type = MYSQL_BOTH)
{
   if (!@mysql_data_seek($this->aResult,$recno))
   {
      if ($this->bDebug == TRUE)
$this->printerror(TRUE);
   }
   $arr = mysql_fetch_array($this->aResult,$arr_type);
   return $arr;
}
 
function single_out($recno,$cssClass="noCSS"  )
{
 
   echo "<table border=\"1\"";
   if ($cssClass != "noCSS")
       echo " class=\"$cssClass\"";
   echo ">";
 
       for ($i=0; $i < $this->iFields; $i++)
       {
          echo "<tr>";
          echo       "<td class=\"".$tableclass."\">";
          echo           strtoupper($this->aFieldNames[$i]);
          echo       "</td>";
          echo       "<td class=\"".$tableclass."\">";
 $xtmp = mysql_result($this->aResult,$recno,$i);
          if (strlen($xtmp))
echo $xtmp;
 else
echo"&nbsp;";
          echo       "</td>";
          echo "</tr>";
       }
    echo "</table>";
 
 
}
 
 
function free_result()
{
     if($this->aResult)
     {
       @mysql_free_result($this->aResult);
       $this->iRecs = $this->iFields = 0;
     }
}
 
 
 
function printerror($exitnow = "FALSE")
{
   echo "mySQL-Error No: " . mysql_errno()." - " .mysql_error();
   if ($exitnow)
      exit;
}
 
 
}
 

 
Использовать так
 
$db = new swemc;
$tablename = "table";
$query = "SELECT * FROM $tablename";
$db->query($query);
$db->tab_out(TRUE,"mytable");




"Полезные решения", а не их поиск! /Cheery/

Всего записей: 532 | Зарегистр. 14-09-2003 | Отправлено: 19:22 11-02-2005 | Исправлено: Cheery, 21:56 11-02-2005
ord



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кому пригодиться.
Небольшой заменитель phpmyadmin, умеет создавать/редактировать/удалять таблицы и поля.
Как только будет время даделую работу с  данными, и смену баз, может еще что-нить сделаю - предлагайте.
 
_ttp://wet.ru2.info/stat.zip

Всего записей: 60 | Зарегистр. 24-07-2003 | Отправлено: 11:40 17-02-2005
3style

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я тут новенький, да и вообще PHP начал заниматься не давно (хотя и это преувеличение)...прошу мне подсказать, каким образом при нажатии на кнопку инфа перемещаеться из одной <textarea> в другую....за ранее огромное спасибо....nick_galoch@mail.ru




Читаем название темы. Тут собирают полезные решения, а не задают вопросы. /Cheery/

Всего записей: 2 | Зарегистр. 22-03-2005 | Отправлено: 14:56 24-03-2005 | Исправлено: Cheery, 08:24 25-03-2005
zhecka1

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
это тебе надо в форум по JavaScript ...




Модератор сделал свое замечание - ну ты куда лезешь то? /Cheery/

Всего записей: 39 | Зарегистр. 23-12-2004 | Отправлено: 16:29 05-04-2005 | Исправлено: Cheery, 21:15 05-04-2005
BarmaLINI



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
забавное решение, случайно нарвался .. может кому будет полезно :о)
 
switch(true)
{
case ($a==5 && $b==7):
...
break;
case ($a==12):
...
break;
}

Всего записей: 30 | Зарегистр. 06-04-2005 | Отправлено: 13:49 06-04-2005
Kokoc

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот еще от меня полезный скрипт, если кто хочет давать погоду на своем wap-сайте:

Код:
 
<?
  // URL страницы города. Найдите на www.gismeteo.ru свой
  define('URL','http://www.gismeteo.ru/weather/towns/37021.htm');
   // Имя файла кэша. Должен иметь права доступа 666 (rw-rw-rw)
  define('WEATHER_CACHE_FILE','weather.cache');
 
  Header("Content-type:text/vnd.wap.wml");  
  include("wapfunc.inc");  
  WML_Header();
  print "<card id=\"weather\" title=\"Weather\">\n";
  // Проверяем сущестование файла-кэша и что он новый:
  if(file_exists(WEATHER_CACHE_FILE) && filesize(WEATHER_CACHE_FILE)>1000 &&
    (time() - filemtime(WEATHER_CACHE_FILE) < 7200)) {
    $w = unserialize(file_get_contents(WEATHER_CACHE_FILE));
 
  } else {
     // вытаскиваем страницу из gismeteo.
    $fp=@fopen(URL,"r");
    if(!$fp) {
      print "<p>ERROR $message</p>";
      print "</card></wml>\n";  
      exit(0);
    }
    $content="";
    while(!feof($fp)) { $content .= fgets($fp,512); }
    fclose($fp);
    // парсим HTML
    preg_match("/Для печати<\\/a><\\/b><\\/span><\\/td><\\/tr>(.*)<\\/table>/U",$content,$m);
    $z=preg_replace("/<tr>|<\\/a>|<span class=sml>|<\\/span>|\\snowrap\\s|align=center|bgcolor=([0-9A-F]+>)/","",$m[1]);
    $z=preg_replace("/<td|a\\s.+\\>/U","",$z);  
    $z=str_replace("<br>"," ",$z);
    $rows = split("</tr>",$z);
    // 0 - заголовк (время).  
    // 1 - облачность  
    // 2 - осадки
    // 3 - давление
    // 4 - температура
    // 5 - влажность
    // 6 - ветер
    // 7 - комфорт
    //формируем массив $w[i][j] где i- показатель, j-время
    for($i=0; $i<7; $i++) {
      $r=split("</td>",$rows[$i]);
      for($j=0; $j<count($r); $j++) {
        $r[$j]=preg_replace("/^\\s+/","",$r[$j]);  
        switch($i) {
          case 1:
          case 2:
            $r[$j] = preg_replace("/.+title=\"(.*)\".*/","$1",$r[$j]);
            break;
          case 3:
          case 4:  
            $r[$j]=preg_replace("/\\s/","..",$r[$j]);
            break;
        }
        $w[$i][$j] = $r[$j];
      } // for j
    } // for i
    // пишем в кэш, чтобы зря не дергать gismeteo
    $fp=fopen(WEATHER_CACHE_FILE,"w");
    flock($fp,LOCK_EX);
    fputs($fp,serialize($w));
    flock($fp,LOCK_UN);
    fclose($fp);
  }
// Теперь рисуем WAP-страницу
// ф-ция win2utf просто переводит из кодировки cp1251 в utf-8.  
for($j=1; $j<12; $j++) {
  print "<p>";
  print "<b>".win2utf($w[0][$j])."</b><br/>\n"; // время
  print win2utf($w[1][$j].", ".$w[2][$j])."<br/>\n"; // осадки, облачность
  print "t ".win2utf($w[4][$j]); // t
  print win2utf(", давл. ".$w[3][$j]."мм");
  print win2utf(", ветер ".$w[6][$j]."м/с");
  print win2utf(", влаж. ".$w[5][$j]."%");
  print "</p>\n";
}
print "</card></wml>\n";
?>
 

Пример работы скрипта есть на http://wap.maykop.org.ru

Всего записей: 793 | Зарегистр. 06-06-2002 | Отправлено: 17:11 06-04-2005
Aleksanders



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как собрать из исходников вместе mysql php и apache чтобы php работал как загружаемый модуль apache?

----------
LINUX = Linux Is Not a UniX





поднимаем глаза наверх и читаем о чем этот топик вообще. Потом вспоминаем, что это вот такая тема в которой есть ссылки на такие вопросы /Cheery/

Всего записей: 1428 | Зарегистр. 07-07-2002 | Отправлено: 13:26 21-04-2005 | Исправлено: Cheery, 21:45 21-04-2005
Thorin



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
есть такой мод для движка PunBB, нужно подправить, чтобы авторефреш был и чтобы можно кликом на ник автоматом вставлять его в строку ввода
Подробнее...
Если кому не лень, посмотрите что с этим можно сделать?





Еще раз говорю - тут приводятся элегантные решения различных проблем, а не задаются вопросы! /Cheery/

Всего записей: 98 | Зарегистр. 07-09-2004 | Отправлено: 15:21 28-04-2005 | Исправлено: Cheery, 18:42 28-04-2005
BarmaLINI



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вы хоть читаете тему ???




А ты читаешь правила? И коммент пятью постами выше.. /Cheery/

Всего записей: 30 | Зарегистр. 06-04-2005 | Отправлено: 14:00 29-04-2005 | Исправлено: Cheery, 21:09 29-04-2005
dimedime

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Начну:  
 
Код:
 
  function err_handler ($errno, $errstr, $errfile, $errline) {  
    global $display_errors;  
    if(($errno != E_NOTICE && $errno != E_WARNING) && $display_errors){  
      echo '';  
    }  
  }  
  $error_flags = E_ALL & ~E_NOTICE;  
  @error_reporting($error_flags);  
  @ini_set ('error_reporting', $error_flags);  
  $old_error_handler = set_error_handler("err_handler");  
 
 
 
Бывает полезным, убивает все нотайсы, выводы ошибок и прочее.

 
Честно говоря очень смущает целесообразность  использования  
  @error_reporting($error_flags);  
  @ini_set ('error_reporting', $error_flags);  
одновременно, да еще и с  
set_error_handler
 
а вобще-то технология удобная я сам пользуюсь для отладки
 

Код:
 
function ViewErrorHandler($errorno, $errormsg, $filename, $linenum)
{
  print "<pre>\n";
  print "Error #$errorno: $errormsg\n";
  print stack(2);
  print "</pre>\n";
  die();
}
 
function stack($skip = 1)
{
  $stack = array();
  foreach(debug_backtrace() as $call)
    if (0 > --$skip) $stack[] = $call['function'].':'.$call['line'].$call['file']."\n";
  return join($stack);
}
 
set_error_handler('ViewErrorHandler');
 

 
Для рабочего сайта, конечно, обработчик нужен другой
Зато такой очень удобен для отладки и для QA
Переключение между ними у меня обычно происходит по параметру в конфиге проекта.
 
Добавлено:

Цитата:
 
Классик для мониторинга времени на парсинге php.  
 
 
Код:
 
class timer {  
 
``var $start;  
``var $stop;  
 
``function start() {  
````$t = gettimeofday();  
````$this->start = $t['sec'] * 1000000.0 + $t['usec'];  
``}  
 
``function stop() {  
````$t = gettimeofday();  
````$this->stop = $t['sec'] * 1000000.0 + $t['usec'];  
``}  
 
``function show() {  
````if (!isset($this->stop)) $this->stop();  
````$elaps = ($this->stop - $this->start) / 1000000.0;  
````if ($elaps < 0.0001) {  
``````$elaps = "< 0.0001";  
````} else {  
``````$elaps = round($elaps, 4);  
``````$elaps = number_format($elaps, 4);  
````}  
````return $elaps . " s.";  
 
``}  
}  
 
// Сразу после создания класса запускаем главный таймер сайта  
$mainTimer = new timer;  
$mainTimer->start();  
   

 
 
потом чтобы вывести только что созданный таймер где-нибудь в конце:  
 
Код:
 
echo $mainTimer->show();  
 

 
Как-то любите вы все усложнять
 

Код:
 
function timer($shift = false)
{
  static $first = 0;
  static $last;
 
  $now = preg_replace('#^0(.*) (.*)$#', '$2$1', microtime());
  if (!$first) $first = $now;
  $res = $shift ? $now - $last : $now - $first;
  $last = $now;
  return $res;
}
 
timer();
 

 
вызов

Код:
 
timer();
 

выдает время прошедшее с первого вызова таймера, а  

Код:
 
timer(1);
 

выдает время от предыдущего вызова.
 
PS - для любителей покритиковать - preg_replace использован потому что многочисленные замеры показали его преимущество перед другими методами

Всего записей: 3 | Зарегистр. 05-05-2005 | Отправлено: 18:40 05-05-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: Полезные (интересные и оригинальные) решения


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru