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

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

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

 Версия для печати • ПодписатьсяДобавить в закладки

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

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
SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В поддержание темы:
Данный цикл поможет сделать разбитие на страницы, а именно нумеризацию (1 2 3 4...)

Код:
 
$num = 10;  // Число записей всего.
$perpage = 7; // Кол-во, показываемых записей на странице.
$pages_count = @ceil($num/$perpage);
$pages .= 'Страницы:';
  for($j=1;$j<=$pages_count;$j++)
 {
 
          if ($_GET['page'] != $j)
          {
             $pages .= ' <a href="?page='.$j.'"><b>'.$j.'</b></a> ';
          }
          else
          {
             $pages .= ' <b>'.$j.'</b> ';
          }
 }
 
 
 

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 19:45 26-07-2004 | Исправлено: SafeWay, 19:46 26-07-2004
Church



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

Код:
 
<?php
if (isset ($_REQUEST["page"])){
$page=$_REQUEST["page"];
settype($page,"integer");
}
else {$page=1;}
 
$num_p=2; //Сколько номеров будет показано слева и справа от текущей страницы.
$num_all=15; //Всего "чего-то"
$limit=2; //"Чего-то" на одной странице
 
$n=$num_all/$limit;
if (!is_integer($n)){settype($n,"integer");$n++;}
if ($n>1){
print "<center>";
$start_p=$page-$num_p;
$end_p=$page+$num_p;
if ($end_p>$n){$end_p=$n;}
$start_p=$end_p-$num_p*2;
if ($start_p<1){$start_p=1;}
$end_p=$start_p+$num_p*2;
if ($start_p>1){
$t=$start_p-1;
print "<a href=\"1.php?page=".$t."\"><== Prev</a> ";
}
for ($i=$start_p;$i<$end_p+1 && $i<$n+1;$i++){
if ($page!=$i){
print "<a href=\"1.php?page=".$i."\">[".$i."]</a> ";
}
else {
print "<a href=\"1.php?page=".$i."\" style=\"color:#cccccc\">[".$i."]</a> ";
}
}
if ($end_p<$n){
print "<a href=\"1.php?page=".$i."\">Next =>></a>";
}
print "</center>";
}
print "Всего страниц: ".$n."<hr>";
if ($num_all>$limit){
$nop2=($page-1)*$limit;
if ($nop2>$num_all or $page<1){
print "Страница не существует";
}
}
?>
 

 
Тоже страницы... Тока с "NEXT" и "PREV"... Что-то намутил такое страшное.... Вроде как работает....

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 01:08 29-07-2004 | Исправлено: Church, 13:48 29-07-2004
SafeWay



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

Код:
 
 
$text = 'Переведём-ка мы всё это хозяйство на латиницу';
 
echo ru2lat($text); // передаем функции необходимую переменную с текстом
 
function ru2Lat($string)
{
$rus = array('ё','ж','ц','ч','ш','щ','ю','я','Ё','Ж','Ц','Ч','Ш','Щ','Ю','Я');
$lat = array('yo','zh','tc','ch','sh','sh','yu','ya','YO','ZH','TC','CH','SH','SH','YU','YA');
$string = str_replace($rus,$lat,$string);
$string = strtr($string,
"АБВГДЕЗИЙКЛМНОПРСТУФХЪЫЬЭабвгдезийклмнопрстуфхъыьэ",
"ABVGDEZIJKLMNOPRSTUFH'I'Eabvgdezijklmnoprstufh'i'e");
 
return($string);
}
 
/////////
Функция для записи в файл.
//$input - содержимое, которое будем записывать  
//$file - полный путь и имя файла  
//$chmod - аргумент, указывающий перезаписываем мы или дописываем файл  
 
function Save2File($input,$file,$chmod='w+')
{
$fp = fopen($file,$chmod);
flock($fp,2);
fputs ($fp,$input);
flock($fp,3);
fclose($fp);
}
 
 
 

 

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 20:20 30-07-2004
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для записи/чтения думаю, что будет полезно почитать это:
http://spectator.ru/technology/php/flock_workaround

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 01:58 31-07-2004
sculderspb

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Моя функция постраничного вывода с описанием и инструкциями по использованию. Довольная мощная и можно настроить под свои нужды:  
 
http://sculder.traktir.ru/stuff/php/scripts/pager.html
 
Полагаю, пригодится, ибо в инете мало чего толкового есть.

Всего записей: 25 | Зарегистр. 01-02-2004 | Отправлено: 07:13 04-08-2004
MAGISTRATE



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

Код:
 
############# генерируем шапку
function title($pagename,$all)
{
global $SITE;
 
           ##### выводим через жаву заголовок если $all == no
  if($all == "no"):
 
    $pagename = strtolower($pagename);
    $pagename[0] = strtoupper($pagename);
    print"<script language=javascript>";
    print"window.top.document.title=\"$SITE[comp] :: $pagename\"";
    print"</script>";
 
           ##### выводим имя раздела, если all == one
  elseif($all == 'one'):
    $pagename = $pagename;
    print"<b>$pagename</b>";
 
           ##### выводим все если $all == yes
  elseif($all == 'yes'):
    $pagenametop = strtolower($pagename);
    $pagename = strtoupper($pagename);
    $pagenametop[0] = strtoupper($pagename);
 
    print"<script language=javascript>";
    print"window.top.document.title=\"$SITE[comp] :: $pagenametop\"";
    print"</script>";
 
    print"<b>$pagename</b>";
  endif;
}
 

 
А так же выдрал из регистра:
 

Код:
 
function R_strlow ($str)
{
 
// фиксит  баг со strtolower в русском апаче (русские буквы не переводятся в нижний регистр)
$str=strtolower($str);
 
if (strtolower ("ЖОпа")!="жопа") $str = strtr
(
$str,
'АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯ',
'абвгдеёжзийклмнорпстуфхцчшщъьыэюя'
);  
 
 
return $str;  
 
};
 

 
И на закуску:
 

Код:
 
// очищаем строку от опасных символов
function untag ($string)  
{
        $string = ereg_replace("<","&lt;",$string);
        $string = ereg_replace(">","&gt;",$string);
        $string = ereg_replace('\\\"',"&quot;",$string);
        $string = ereg_replace(":","&#58;",$string);
        $string = ereg_replace("!","&#33;",$string);
        $string = ereg_replace("\r","",$string);
        $string = ereg_replace("\n","<br>",$string);
        $string = ereg_replace("%","&#37;",$string);  
        $string = ereg_replace("^ +","",$string);
        $string = ereg_replace(" +$","",$string);
        $string = ereg_replace(" +"," ",$string);
        return $string;
};
 

 
Все вышеперечисленное просто, но неимоверно облегчает иной раз работу.

----------
ага

Всего записей: 888 | Зарегистр. 23-07-2003 | Отправлено: 00:51 06-08-2004
SafeWay



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

Цитата:
function untag ($string)  
{  
        $string = ereg_replace("<","&lt;",$string);  
        $string = ereg_replace(">","&gt;",$string);  
        $string = ereg_replace('\\\"',"&quot;",$string);  
        $string = ereg_replace(":","&#58;",$string);  
        $string = ereg_replace("!","&#33;",$string);  
        $string = ereg_replace("\r","",$string);  
        $string = ereg_replace("\n","<br>",$string);  
        $string = ereg_replace("%","&#37;",$string);  
        $string = ereg_replace("^ +","",$string);  
        $string = ereg_replace(" +$","",$string);  
        $string = ereg_replace(" +"," ",$string);  
        return $string;  
};  

Имхо лучше str_replace
$string = ereg_replace('\\\"',"&quot;",$string); - убивается проще - функцией stripslashes()

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 03:06 06-08-2004 | Исправлено: SafeWay, 03:07 06-08-2004
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Имхо, лучше использовать PCRE, а в данной задаче по моему достаточно $string=nl2br(htmlspecialchars($string));
PS: по поводу "убивает все нотайсы, выводы ошибок и прочее" - разве error_reporting(0) для этих целей недостаточно?

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 14:18 06-08-2004 | Исправлено: SiMM, 14:19 06-08-2004
Church



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
[POST_EDITING]
Упс.. Не внимательно прочитал содержимое тему... Лишняя месага... Всем сорьки
[/POST_EDITING]

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 15:00 06-08-2004 | Исправлено: Church, 16:41 06-08-2004
dacuan

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

Цитата:
function R_strlow ($str)  
{  
 
// фиксит  баг со strtolower в русском апаче (русские буквы не переводятся в нижний регистр)

Вообще-то этот "баг" лечится установкой локали:

Код:
 
setlocale(LC_ALL, "ru_RU.CP1251");
 

 
А вот обратное преобразование -- строки со специальными HTML-символами в обычную строку, например "&gt;" => ">"

Код:
 
function unhtmlspecialchars($str){
    $trans = get_html_translation_table(HTML_SPECIALCHARS);
    $trans[' '] = '&nbsp;';
    $trans = array_flip($trans);
 
    return strtr (str_replace("<br>", "\r\n", $str), $trans);
}
 


Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 16:36 06-08-2004
MAGISTRATE



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
dacuan
Я привел то, с чем мне удобнее пользоваться.  
 
 
SiMM
Ну давай. Юзай дальше свой htmlspecialchars  
 
SafeWay
Не согласен, попробуй обработать строку и так и так и засечь время....
Во вторых, много функций лепить - не дело. Поэтому красивее
 
untug(string);
 
чем
 
nl2br(addqoutes(stripslashes(htmlspecialchars(untug(string)))))
 
Так что товарищи, совет почитать книгу по оптимизации кода.


----------
ага

Всего записей: 888 | Зарегистр. 23-07-2003 | Отправлено: 19:16 06-08-2004
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MAGISTRATE
Эта ветка для готовых решений, а не для флейма.
Ты привел свой вариант решения проблемы, тебе предложили другой.
И направлять людей "почитать книгу" тоже не есть хорошо, особенно, если не привел ссылку.
Покажи мне в следующей строке "оптимизированный" код:

Цитата:
 
if (strtolower ("ЖОпа")!="жопа") $str = strtr
 

На счет эффективности использования eregi_* интересно почитать здесь
 
А вот и сравнение скорости
Имеем скрипт

Код:
 
<?
function echo_dif($start, $end){
$aA = explode(' ',$start.' '.$end);
$duration=($aA[2]+$aA[3])-($aA[0]+$aA[1]);
echo $duration."<br>";
}
 
function untag ($string)
{
        $string = ereg_replace("<","&lt;",$string);
        $string = ereg_replace(">","&gt;",$string);
        $string = ereg_replace('\\\"',"&quot;",$string); //Эта строка не будет работать с отключенным magic_quotes
        $string = ereg_replace(":","&#58;",$string);
        $string = ereg_replace("!","&#33;",$string);
        $string = ereg_replace("\r","",$string);
        $string = ereg_replace("\n","<br>",$string);
        $string = ereg_replace("%","&#37;",$string);
        $string = ereg_replace("^ +","",$string);
        $string = ereg_replace(" +$","",$string);
        $string = ereg_replace(" +"," ",$string);
        return $string;
};
 
function untag_str ($string)
{
        $string = str_replace("<","&lt;",$string);
        $string = str_replace(">","&gt;",$string);
        $string = str_replace('\\\"',"&quot;",$string); //Эта строка не будет работать с отключенным magic_quotes
        $string = str_replace(":","&#58;",$string);
        $string = str_replace("!","&#33;",$string);
        $string = str_replace("\r","",$string);
        $string = str_replace("\n","<br>",$string);
        $string = str_replace("%","&#37;",$string);
        $string = preg_replace("/\s+/s"," ",$string);
        return trim($string);
};
 
function my_untag ($string) {
return trim(nl2br(htmlspecialchars($string)));
}
 
$text = implode('\n', file('str_replace.htm'));
 
set_time_limit(0);
define("STEPS", 1);
//eregi
$start = microtime();
for($i=0; $i<STEPS; $i++){
$str = untag($text);
}
echo "eregi: ";
echo_dif($start, microtime());
 
//str
$start = microtime();
for($i=0; $i<STEPS; $i++){
$str = untag_str($text);
}
echo "str: ";
echo_dif($start, microtime());
 
//htmlspecialchars
$start = microtime();
for($i=0; $i<STEPS; $i++){
$str = trim(nl2br(htmlspecialchars($text)));
}
echo "htmlspecialchars: ";
echo_dif($start, microtime());
 
//myuntag
$start = microtime();
for($i=0; $i<STEPS; $i++){
$str = my_untag($text);
}
echo "my_untag: ";
echo_dif($start, microtime());
?>
 

 
Парсился html-файл размером 47Kb. Вот результаты:

Цитата:
 
eregi: 5.6553299427032
str: 0.086328983306885
htmlspecialchars: 0.02831506729126
my_untag: 0.028412103652954
 

 
Как видишь по результатам твой вариант скрипта сильно отстает от str_replace и тем более от htmlspecialchars.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 21:03 06-08-2004
SiMM

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

Цитата:
Как видишь по результатам твой вариант скрипта сильно отстает от str_replace и тем более от htmlspecialchars.
Результаты вполне предсказуемы - htmlspecialchars - единственная функция, решающая задачу "внутри" в один цикл по входной строке, без всяких вложенностей (ссылка по теме).

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 21:18 06-08-2004
MAGISTRATE



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

Код:
 
function untag($string)
{
                $string = strip_tags($string);
                $string = str_replace('\"','&quot;',$string);
                $string = str_replace("\'","&quot;",$string);
                $string = str_replace("\&","&",$string);
                $string = str_replace("<","&lt;",$string);
                $string = str_replace('\\\"',"&quot;",$string);
                $string = str_replace('\\"',"&quot;",$string);
                $string = str_replace("!","&#33;",$string);
                $string = str_replace("\r\n","<br>",$string);
                $string = str_replace("\n","<br>",$string);
                $string = str_replace("%","&#37;",$string);
                $string = str_replace("^ +","",$string);
                $string = str_replace(" +$","",$string);
                $string = str_replace(" +"," ",$string);
 
                return $string;
}
 

(По просьбе xntx'a изменил на str_ ему так лучше смотрится видимо)
 
Валиден ли и-мейл?

Код:
 
function check_email_addr($email) {
        if (ereg('^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+'. '@'.'[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.'.'[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$', $email)) return 1;
          else return 0;
}
 

 
Добавляем ссылку в строку

Код:
 
         function strings_addlinks($string)
         {
                 return preg_replace("%((?:http|ftp)://[-\w]+(?:\.[-\w]+)+\b[-\w:@&?=+,!/~*$\.\'\%]*)(?<![\.,?!)])%i","<a href='\\1'>\\1<a>",$string);
         }
 

 
Иной раз тупость людей убивает...
Интересно, а как htmlspecialchars поможет, если в строке надо оставить
только <b> <i> <u>.

----------
ага

Всего записей: 888 | Зарегистр. 23-07-2003 | Отправлено: 22:15 06-08-2004 | Исправлено: MAGISTRATE, 01:20 18-08-2004
SiMM

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

Цитата:
Иной раз тупость людей убивает...
Заносит на поворотах? Если до тебя не доходит - как минимум, PCRE быстрее POSIX, суть некоторой части твоих замен для браузера совершенно бесполезна.

Цитата:
Интересно, а как htmlspecialchars поможет, если в строке надо оставить  
только <b> <i> <u>.
Это другая задача, которая решается при помощи strip_tags, и не имеет никакого отношения к htmlspecialchars, так же, как eregi не имеет отношения к отправке почты.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 22:38 06-08-2004
SafeWay



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

Цитата:
nl2br(addqoutes(stripslashes(htmlspecialchars(untug(string)))))  
 
Так что товарищи, совет почитать книгу по оптимизации кода

Это всё можно внутни той же функции сделать.
И выкладываем всё таки гововые решения, для спора что быстрее, или усердное доказывание своей правоты можно создать свой топ.
Одного раза показать на "правильный" с вашей стороны вариант будет предостаточно...

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 00:02 07-08-2004
SafeWay



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

Код:
class thumbnail
{
var $imgfile;
 
function thumb($imgfile)
{
   if (!file_exists($imgfile)) die ("Cannot read the file!");
  //detect image format
//$this->img["format"] = ereg_replace(".*\.(.*)$","\\1",$imgfile);
  $hz = explode(".", $name);
  $this->img["format"] = $hz[sizeof($hz-1)];
  $this->img["format"] = strtoupper($this->img["format"]);
  if ($this->img["format"]=="JPG" || $this->img["format"]=="JPEG")
  {
     //JPEG
    $this->img["format"]="JPG";
    $this->img["src"] = ImageCreateFromJPEG($imgfile);
  }
  elseif ($this->img["format"]=="PNG")
  {
     //PNG
     $this->img["format"]="PNG";
     $this->img["src"] = ImageCreateFromPNG($imgfile);
  }
  elseif ($this->img["format"]=="GIF")
  {
     //GIF
     $this->img["format"]="GIF";
     $this->img["src"] = ImageCreateFromGIF($imgfile);
 
}
 else {
//DEFAULT
echo "Not Supported File! Thumbnails can only be made from .gif, .jpg and .png images!";
exit();
}
$this->img["lebar"] = imagesx($this->img["src"]);
$this->img["tinggi"] = imagesy($this->img["src"]);
//default quality jpeg
$this->img["quality"]=100;
}
 
function size_auto($size=100)
{
  //size
  if ($this->img["lebar"]>=$this->img["tinggi"])
  {
    $this->img["lebar_thumb"]=$size;
    $this->img["tinggi_thumb"] = ($this->img["lebar_thumb"]/$this->img["lebar"])*$this->img["tinggi"];
  }
  else
  {
    $this->img["tinggi_thumb"]=$size;
    $this->img["lebar_thumb"] = ($this->img["tinggi_thumb"]/$this->img["tinggi"])*$this->img["lebar"];
  }
}
 
function jpeg_quality($quality=100)
{
//jpeg quality
$this->img["quality"]=$quality;
}
 
 
 
function show($gd_version)
{
  Header("Content-Type: image/".$this->img["format"]);
  if($gd_version==2)
  {
     $this->img["des"] = imagecreatetruecolor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
     imagecopyresampled ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"],$this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);
  }
  if($gd_version==1)
  {
     $this->img["des"] = imagecreate($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
     imagecopyresized ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"],$this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);
  }
  if ($this->img["format"]=="JPG" || $this->img["format"]=="JPEG")
  {
     //JPEG
     imageJPEG($this->img["des"],"",$this->img["quality"]);
  }
  elseif ($this->img["format"]=="PNG")
  {
     //PNG
     imagePNG($this->img["des"]);
  }
  elseif ($this->img["format"]=="GIF")
  {
     //GIF
     imageGIF($this->img["des"]);
  }
}
 
function save($save="",$gd_version)
{
 
       if($gd_version==2)
       {
          $this->img["des"] = imagecreatetruecolor($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
          @imagecopyresampled ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"], $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);
       }
       if($gd_version==1)
       {
          $this->img["des"] = imagecreate($this->img["lebar_thumb"],$this->img["tinggi_thumb"]);
          @imagecopyresized ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $this->img["lebar_thumb"],     $this->img["tinggi_thumb"], $this->img["lebar"], $this->img["tinggi"]);
       }
       if ($this->img["format"]=="JPG" || $this->img["format"]=="JPEG")
       {
          //JPEG
          imageJPEG($this->img["des"],"$save",$this->img["quality"]);
       }
       elseif ($this->img["format"]=="PNG")
       {
           //PNG
           imagePNG($this->img["des"],"$save");
       }
       elseif ($this->img["format"]=="GIF")
       {
           //GIF
           imageGIF($this->img["des"],"$save");
       }
}
 
 
   function open_save($open, $save, $size, $gd)
   {
      $this->thumb($open);
      $this->size_auto($size);
      $this->save($save, $gd);
   }
 
}
 

Делать превьюшки ) Если надо сохранить копию картинки (уменьшенную, увеличенную), то:
$thumbnail = new thumbnail;
$thumbnail->open_save('1.jpg', 'copy.jpgf', $size, 2);
Где $size = размер полученной картинки.

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 16:38 08-08-2004
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Класс, который позволяет создать zip-архив из нескольких файлов.
Взят из phpMyAdmin/
Недостаток: не устанавливается время создания файла в архиве.

Код:
 
/**
 * Zip file creation class.
 * Makes zip files.
 *
 * Based on :
 *
 *  http://www.zend.com/codex.php?id=535&single=1
 *  By Eric Mueller (eric@themepark.com)
 *
 *  http://www.zend.com/codex.php?id=470&single=1
 *  by Denis125 (webmaster@atlant.ru)
 *
 * Official ZIP file format: http://www.pkware.com/appnote.txt
 *
 * @access  public
 */
class zipfile
{
    /**
     * Array to store compressed data
     *
     * @var  array    $datasec
     */
    var $datasec      = array();
 
    /**
     * Central directory
     *
     * @var  array    $ctrl_dir
     */
    var $ctrl_dir     = array();
 
    /**
     * End of central directory record
     *
     * @var  string   $eof_ctrl_dir
     */
    var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
 
    /**
     * Last offset position
     *
     * @var  integer  $old_offset
     */
    var $old_offset   = 0;
 
 
    /**
     * Adds "file" to archive
     *
     * @param  string  file contents
     * @param  string  name of the file in the archive (may contains the path)
     *
     * @access public
     */
    function addFile($data, $name)
    {
        $name = str_replace('\\', '/', $name);
 
        $fr   = "\x50\x4b\x03\x04";
        $fr   .= "\x14\x00";            // ver needed to extract
        $fr   .= "\x00\x00";            // gen purpose bit flag
        $fr   .= "\x08\x00";            // compression method
        $fr   .= "\x00\x00\x00\x00";    // last mod time and date
 
        // "local file header" segment
        $unc_len = strlen($data);
        $crc     = crc32($data);
        $zdata   = gzcompress($data,9);
        $zdata   = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
        $c_len   = strlen($zdata);
        $fr      .= pack('V', $crc);             // crc32
        $fr      .= pack('V', $c_len);           // compressed filesize
        $fr      .= pack('V', $unc_len);         // uncompressed filesize
        $fr      .= pack('v', strlen($name));    // length of filename
        $fr      .= pack('v', 0);                // extra field length
        $fr      .= $name;
 
        // "file data" segment
        $fr .= $zdata;
 
        // "data descriptor" segment (optional but necessary if archive is not
        // served as file)
        $fr .= pack('V', $crc);                 // crc32
        $fr .= pack('V', $c_len);               // compressed filesize
        $fr .= pack('V', $unc_len);             // uncompressed filesize
 
        // add this entry to array
        $this -> datasec[] = $fr;
        $new_offset        = strlen(implode('', $this->datasec));
 
        // now add to central directory record
        $cdrec = "\x50\x4b\x01\x02";
        $cdrec .= "\x00\x00";                // version made by
        $cdrec .= "\x14\x00";                // version needed to extract
        $cdrec .= "\x00\x00";                // gen purpose bit flag
        $cdrec .= "\x08\x00";                // compression method
        $cdrec .= "\x00\x00\x00\x00";        // last mod time & date
        $cdrec .= pack('V', $crc);           // crc32
        $cdrec .= pack('V', $c_len);         // compressed filesize
        $cdrec .= pack('V', $unc_len);       // uncompressed filesize
        $cdrec .= pack('v', strlen($name));  // length of filename
        $cdrec .= pack('v', 0 );             // extra field length
        $cdrec .= pack('v', 0 );             // file comment length
        $cdrec .= pack('v', 0 );             // disk number start
        $cdrec .= pack('v', 0 );             // internal file attributes
        $cdrec .= pack('V', 32 );            // external file attributes - 'archive' bit set
 
        $cdrec .= pack('V', $this -> old_offset ); // relative offset of local header
        $this -> old_offset = $new_offset;
 
        $cdrec .= $name;
 
        // optional extra field, file comment goes here
        // save to central directory
        $this -> ctrl_dir[] = $cdrec;
    } // end of the 'addFile()' method
 
 
    /**
     * Dumps out file
     *
     * @return  string  the zipped file
     *
     * @access public
     */
    function file()
    {
        $data    = implode('', $this -> datasec);
        $ctrldir = implode('', $this -> ctrl_dir);
 
        return
            $data .
            $ctrldir .
            $this -> eof_ctrl_dir .
            pack('v', sizeof($this -> ctrl_dir)) .  // total # of entries "on this disk"
            pack('v', sizeof($this -> ctrl_dir)) .  // total # of entries overall
            pack('V', strlen($ctrldir)) .           // size of central dir
            pack('V', strlen($data)) .              // offset to start of central dir
            "\x00\x00";                             // .zip file comment length
    } // end of the 'file()' method
 
} // end of the 'zipfile' class
 

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 11:42 09-08-2004
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Класс для отправления почтовых сообщений в виде html с прикрепленными файлами

Код:
 
class html_mime_mail {
  var $headers;
  var $multipart;
  var $mime;
  var $html;
  var $parts = array();
 
  function html_mime_mail($headers="") {
    $this->headers=$headers;
  }
 
  function add_html($html="") {
    $this->html.=$html;
  }
 
  function build_html($orig_boundary,$kod) {
    $this->multipart.="--$orig_boundary\n";
    if ($kod=='w' || $kod=='win' || $kod=='windows-1251') $kod='windows-1251';
    else $kod='koi8-u';
    $this->multipart.="Content-Type: text/html; charset=$kod\n";
    $this->multipart.="Content-Transfer-Encoding: Quot-Printed\n\n";
    $this->multipart.="$this->html\n\n";
  }
 
 
  function add_attachment($path="", $name = "", $c_type="application/octet-stream") {
    if (!file_exists($path.$name)) {
      print "File $path.$name dosn't exist.";
      return;
    }
    $fp=fopen($path.$name,"r");
    if (!$fp) {
      print "File $path.$name coudn't be read.";
      return;
    }
    $file=fread($fp, filesize($path.$name));
    fclose($fp);
    $this->parts[]=array("body"=>$file, "name"=>$name,"c_type"=>$c_type);
  }
 
 
  function build_part($i) {
    $message_part="";
    $message_part.="Content-Type: ".$this->parts[$i]["c_type"];
    if ($this->parts[$i]["name"]!="")
       $message_part.="; name = \"".$this->parts[$i]["name"]."\"\n";
    else
       $message_part.="\n";
    $message_part.="Content-Transfer-Encoding: base64\n";
    $message_part.="Content-Disposition: attachment; filename = \"".
       $this->parts[$i]["name"]."\"\n\n";
    $message_part.=chunk_split(base64_encode($this->parts[$i]["body"]))."\n";
    return $message_part;
  }
 
 
  function build_message($kod) {
    $boundary="=_".md5(uniqid(time()));
    $this->headers.="MIME-Version: 1.0\n";
    $this->headers.="Content-Type: multipart/mixed; boundary=\"$boundary\"\n";
    $this->multipart="";
    $this->multipart.="This is a MIME encoded message.\n\n";
    $this->build_html($boundary,$kod);
    for ($i=(count($this->parts)-1); $i>=0; $i--)
      $this->multipart.="--$boundary\n".$this->build_part($i);
    $this->mime = "$this->multipart--$boundary--\n";
  }
 
 
  function send($server, $to, $from, $subject="", $headers="") {
    $headers="From: $from\nX-Mailer: Zveno\n$headers";
    $res=mail($to, $subject, "", $this->headers.$headers.$this->mime);
    return $res;
/*    $headers="To: $to\nFrom: $from\nSubject: $subject\nX-Mailer: The Mouse!\n$headers";
    $fp = fsockopen($server, 25, &$errno, &$errstr, 30);
    if (!$fp)
       die("Server $server. Connection failed: $errno, $errstr");
    fputs($fp,"HELO $server\n");
    fputs($fp,"MAIL FROM: $from\n");
    fputs($fp,"RCPT TO: $to\n");
    fputs($fp,"DATA\n");
    fputs($fp,$this->headers);
    if (strlen($headers))
      fputs($fp,"$headers\n");
    fputs($fp,$this->mime);
    fputs($fp,"\n.\nQUIT\n");
    while(!feof($fp))
      $resp.=fgets($fp,1024)."<br>";
    echo "<br><br><br>RESP=$resp<br><br><br>";
    fclose($fp);*/
  }
}
 

 
PS Если есть необходимость не использовать стандартную функцию mail(), то достаточно раскоментировать код в методе send, удалив тот, который сейчас работает. Но в этом случае почему-то не работает с некоторыми серверами, если кто разберется, отпишите

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 20:47 10-08-2004
Sardaukar



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Давайте и чего-нибудь подкину.
 
Вот, например, сильно облегчает жизнь с выключенным register_globals:

Код:
/**
* Вспомогательная ф-я. Ищет в запросе первый аргумент.  
* Если находит - кладет его в глобальные переменные (в случае уст. флага $set_glob)  
* со значением из запроса, если нет - со значением, которое передано в ф-ию
* @since 2004-7-14
* @author Rumata
* @param string $var_name имя переменной
* @param string $def_val дефолтовое значение
* @param string $type Тип переменной. Если mixed, то приведение не производится
* @param bool $set_glob Флаг, показывающий, надо ли устанавливать значение глобальной переменной
* @return mixed Переменная, которая была установлена
*/
function pretest($var_name, $def_val, $type, $set_glob = true) {
  if (isset($_REQUEST[$var_name])) {
    $tmp = $_REQUEST[$var_name];
  } else {
    $tmp = $def_val;
  }
  if ($type != "mixed" && $type != "")  
    settype($tmp, $type);
  if ($set_glob) $GLOBALS[$var_name] = $tmp;
  return $tmp;
}
 

$set_glob - пережиток обратной совместимости. Т.к. я работаю в глобальной обл. видимости, я раньше использовал ф-ю так:

Код:
 
pretest("act","","string");
if ($act == "do_smth") {
..
} elseif ...
 
Теперь мне кажется, что удобнее её использовать так:

Код:
$my_name_for_act = pretest("act","","string");
...

А, если нужно юзать это внутри ф-ии, иил просто не хочется захламлять $GLOBALS, то можно делть так:

Код:
$act = pretest("act","","string",false);

Всего записей: 129 | Зарегистр. 14-09-2001 | Отправлено: 23:29 21-08-2004
SafeWay



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

Код:
<?
 
        class template{
 
                var $var_names        = array();
                var $files                = array();
                var $start                = '{';
                var $end                = '}';
 
        /***************************************
        ** Function to load a template into
        ** the class.
        ***************************************/
 
 
                function load_file($file_id, $filename){$this->files[$file_id] = file_get_contents($filename);}
 
 
        /***************************************
        ** Function to load a template into
        ** the class.
        ***************************************/
                function set_identifiers($start, $end){
                        $this->start = $start;
                        $this->end = $end;
                }
 
        /***************************************
        ** This function is used only by the
        ** register() method, for going through
        ** arays and extracting the values.
        ***************************************/
                function traverse_array($file_id, $array){
                        while(list(,$value) = each($array)){
                                if(is_array($value)) $this->traverse_array($file_id, $value);
                                else $this->var_names[$file_id][] = $value;
                        }
                }
 
        /***************************************
        ** Function to register a variable(s).
        ***************************************/
                function register($file_id, $var_name){
                        if(is_array($var_name)){
                                $this->traverse_array($file_id, $var_name);
                        }elseif($var_name != ''){
                                if(is_long(strpos($var_name, ',')) == TRUE){
                                        $var_name = explode(',', $var_name);
                                        for(reset($var_name); $current = current($var_name); next($var_name)) $this->var_names[$file_id][] = trim($current);
                                }else{
                                        $this->var_names[$file_id][] = $var_name;
                                }
                        }
                }
 
        /***************************************
        ** Function to include another file.
        ** eg. A header/footer.
        ***************************************/
                function include_file($file_id, $filename){
                        if(file_exists($filename)){
                                $include = fread($fp = fopen($filename, 'r'), filesize($filename));
                                fclose($fp);
                        }else $include = '[ERROR: "'.$filename.'" does not exist.]';
 
                        $tag = substr($this->files[$file_id], strpos(strtolower($this->files[$file_id]), '<include filename="'.$filename.'">'), strlen('<include filename="'.$filename.'">'));
                        $this->files[$file_id] = str_replace($tag, $include, $this->files[$file_id]);
                }
 
        /***************************************
        ** Function for reading and parsing the
        ** html file for normal variables. Also
        ** now checks for include tags and if
        ** necessary calls include_file()
        ***************************************/
                function parse($file_id){
                        $file_ids = explode(',', $file_id);
                        for(reset($file_ids); $file_id = trim(current($file_ids)); next($file_ids)){
                                while(is_long($pos = strpos(strtolower($this->files[$file_id]), '<include filename="'))){
                                        $pos += 19;
                                        $endpos = strpos($this->files[$file_id], '">', $pos);
                                        $filename = substr($this->files[$file_id], $pos, $endpos-$pos);
                                        $this->include_file($file_id, $filename);
                                }
 
                                if(isset($this->var_names[$file_id]) AND count($this->var_names[$file_id]) > 0){
                                        for($i=0; $i<count($this->var_names[$file_id]); $i++){
                                                $temp_var = $this->var_names[$file_id][$i];
 
                                                if(is_long(strpos($this->files[$file_id], $this->start.$temp_var.$this->end))){
                                                        global $$temp_var;
                                                        $this->files[$file_id] = str_replace($this->start.$temp_var.$this->end, $$temp_var, $this->files[$file_id]);
 
                                                }elseif(is_long(strpos($this->files[$file_id], $this->start.$temp_var.'()'.$this->end))){
                                                        global $$temp_var;
                                                        $arguments = array();
                                                        for($i=0; $i<count($$temp_var); $i++) $arguments[] = ${$temp_var}[$i];
                                                        if(count($arguments) > 0) $arguments = '"'.implode('", "', $arguments).'"'; else $arguments = '';
                                                        eval('$output = '.$temp_var.'('.$arguments.');');
                                                        $this->files[$file_id] = str_replace($this->start.$temp_var.'()'.$this->end, $output, $this->files[$file_id]);
                                                }
                                        }
                                }
                        }
                }
 
        /***************************************
        ** Function for parsing an array.
        ***************************************/
                function parse_loop($file_id, $array_name){
                        global $$array_name;
                        $loop_code = '';
 
                        $start_pos = strpos(strtolower($this->files[$file_id]), '<loop name="'.$array_name.'">') + strlen('<loop name="'.$array_name.'">');
                        $end_pos = strpos(strtolower($this->files[$file_id]), '</loop name="'.$array_name.'">');
 
                        $loop_code = substr($this->files[$file_id], $start_pos, $end_pos-$start_pos);
 
                        $start_tag = substr($this->files[$file_id], strpos(strtolower($this->files[$file_id]), '<loop name="'.$array_name.'">'),strlen('<loop name="'.$array_name.'">'));
                        $end_tag = substr($this->files[$file_id], strpos(strtolower($this->files[$file_id]), '</loop name="'.$array_name.'">'),strlen('</loop name="'.$array_name.'">'));
 
                        if($loop_code != ''){
                                $new_code = '';
                                for($i=0; $i<count($$array_name); $i++){
                                        $temp_code = $loop_code;
                                        while(list($key,) = each(${$array_name}[$i])){
                                                $temp_code = str_replace($this->start.$key.$this->end,${$array_name}[$i][$key], $temp_code);
                                        }
                                        $new_code .= $temp_code;
                                }
                                $this->files[$file_id] = str_replace($start_tag.$loop_code.$end_tag, $new_code, $this->files[$file_id]);
                        }
                }
 
        /***************************************
        ** Function for parsing a Mysql result
        ** set.
        ***************************************/
                function parse_sql($file_id, $result_name){
                        global $$result_name;
                        $loop_code = '';
 
                        $start_pos = strpos(strtolower($this->files[$file_id]), '<loop name="'.$result_name.'">') + strlen('<loop name="'.$result_name.'">');
                        $end_pos = strpos(strtolower($this->files[$file_id]), '</loop name="'.$result_name.'">');
 
                        $loop_code = substr($this->files[$file_id], $start_pos, $end_pos-$start_pos);
 
                        $start_tag = substr($this->files[$file_id], strpos(strtolower($this->files[$file_id]), '<loop name="'.$result_name.'">'),strlen('<loop name="'.$result_name.'">'));
                        $end_tag = substr($this->files[$file_id], strpos(strtolower($this->files[$file_id]), '</loop name="'.$result_name.'">'),strlen('</loop name="'.$result_name.'">'));
 
                        if($loop_code != ''){
                                $new_code = '';
                                $field_names = array();
                                for($i=0; $i<mysql_num_fields($$result_name); $i++) $field_names[] = mysql_field_name($$result_name,$i);
                                while($row_data = mysql_fetch_array($$result_name, MYSQL_ASSOC)){
                                        $temp_code = $loop_code;
                                        for($i=0; $i<count($field_names); $i++){
                                                $temp_code = str_replace($this->start.$field_names[$i].$this->end, $row_data[$field_names[$i]], $temp_code);
                                        }
                                        $new_code.= $temp_code;
                                }
                                $this->files[$file_id] = str_replace($start_tag.$loop_code.$end_tag, $new_code, $this->files[$file_id]);
                        }
                }
 
        /***************************************
        ** Function for parsing a Postgres result
        ** set.
        ***************************************/
                function parse_pgsql($file_id, $result_name){
                        global $$result_name;
                        $loop_code = '';
 
                        $start_pos = strpos(strtolower($this->files[$file_id]), '<loop name="'.$result_name.'">') + strlen('<loop name="'.$result_name.'">');
                        $end_pos = strpos(strtolower($this->files[$file_id]), '</loop name="'.$result_name.'">');
 
                        $loop_code = substr($this->files[$file_id], $start_pos, $end_pos-$start_pos);
 
                        $start_tag = substr($this->files[$file_id], strpos(strtolower($this->files[$file_id]), '<loop name="'.$result_name.'">'),strlen('<loop name="'.$result_name.'">'));
                        $end_tag = substr($this->files[$file_id], strpos(strtolower($this->files[$file_id]), '</loop name="'.$result_name.'">'),strlen('</loop name="'.$result_name.'">'));
 
                        if($loop_code != ''){
                                $new_code = '';
                                $field_names = array();
                                for($i=0; $i<pg_numfields($$result_name); $i++) $field_names[] = pg_fieldname($$result_name,$i);
                                for($i=0; $i<pg_numrows($$result_name) AND $row_data = pg_fetch_array($$result_name, $i); $i++){
                                        $temp_code = $loop_code;
                                        for($j=0; $j<count($field_names); $j++){
                                                $temp_code = str_replace($this->start.$field_names[$j].$this->end, $row_data[$field_names[$j]], $temp_code);
                                        }
                                        $new_code.= $temp_code;
                                }
                                $this->files[$file_id] = str_replace($start_tag.$loop_code.$end_tag, $new_code, $this->files[$file_id]);
                        }
                }
 
        /***************************************
        ** Function looking for if blocks
        ** added by Stephan L&#252;deritz
        ***************************************/
               function parse_if($file_id, $array_name){
 
                   $var_names = explode(',', $array_name);
 
                   for($i=0; $i<count($var_names); $i++){
                        $if_code        = '';
                        $start_pos        = strpos(strtolower($this->files[$file_id]), '<if name="'.strtolower($var_names[$i]).'">') + strlen('<if name="'.strtolower($var_names[$i]).'">');
                        $end_pos        = strpos(strtolower($this->files[$file_id]), '</if name="'.strtolower($var_names[$i]).'">');
 
                        $if_code        = substr($this->files[$file_id], $start_pos, $end_pos-$start_pos);
                        $start_tag        = substr($this->files[$file_id], strpos(strtolower($this->files[$file_id]), '<if name="'.strtolower($var_names[$i]).'">'),strlen('<if name="'.strtolower($var_names[$i]).'">'));
                        $end_tag        = substr($this->files[$file_id], strpos(strtolower($this->files[$file_id]), '</if name="'.strtolower($var_names[$i]).'">'),strlen('</if name="'.strtolower($var_names[$i]).'">'));
 
                        $new_code = '';
                        if($if_code != ''){
                                global ${$var_names[$i]};
                                if(@${$var_names[$i]})
                                    $new_code = $if_code;
 
                                $this->files[$file_id] = str_replace($start_tag.$if_code.$end_tag, $new_code, $this->files[$file_id]);
                        }
                    }
                }
 
        /***************************************
        ** Function for printing the resulting
        ** file(s).
        ***************************************/
                function print_file($file_id){
                        if(is_long(strpos($file_id, ',')) == TRUE){
                                $file_id = explode(',', $file_id);
                                for(reset($file_id); $current = current($file_id); next($file_id)) echo $this->files[trim($current)];
                        }else{
                                echo $this->files[$file_id];
                        }
                }
 
        /***************************************
        ** Function for returning the resulting
        ** file(s).
        ***************************************/
                function return_file($file_id){
                        $ret = '';
                        if(is_long(strpos($file_id, ',')) == TRUE){
                                $file_id = explode(',', $file_id);
                                for(reset($file_id); $current = current($file_id); next($file_id)) $ret .= $this->files[trim($current)];
                        }else{
                                $ret .= $this->files[$file_id];
                        }
                        return $ret;
                }
 
        /***************************************
        ** Parses and then immediately prints
        ** the file. This function added by
        ** Bruce Christensen.
        ***************************************/
                function pprint($file_id, $replacements = ''){
                        $this->register($file_id, $replacements);
                        $this->parse($file_id);
                        $this->print_file($file_id);
                }
 
        /***************************************
        ** Parses and then immediately returns
        ** the file's contents. Function added
        ** by Bruce Christensen.
        ***************************************/
                function pget($file_id, $replacements = ''){
                        $this->register($file_id, $replacements);
                        $this->parse($file_id);
                        return $this->return_file($file_id);
                }
 
        /***************************************
        ** Loads a file, parses it, and prints it.
        ** This function added by Bruce Christensen.
        ***************************************/
                function pprint_file($filename, $replacements = ''){
                        for($file_id=1; isset($this->files[$file_id]); $file_id++);
                        $this->load_file($file_id, $filename);
                        $this->pprint($file_id, $replacements);
                        unset($this->files[$file_id]);
                }
 
        /***************************************
        ** Loads, parses and then immediately
        ** returns the file's contents.
        ** Function added by Bruce Christensen.
        ***************************************/
                function pget_file($filename, $replacements = ''){
                        for($file_id=1; isset($this->files[$file_id]); $file_id++);
                        $this->load_file($file_id, $filename);
                        return $this->pget($file_id, $replacements);
                }
 
        } // End of class
?>

 
Неплохой шаблонизатор оригинал от phpguru.org, немного переделан.

----------
Hosted by http://www.balthost.ee

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 03:10 22-08-2004 | Исправлено: SafeWay, 03:11 22-08-2004
Cheery



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

Цитата:
Неплохой шаблонизатор  оригинал от phpguru.org, немного переделан.  

а не лучше бы было просто дать ссылку?  
http://www.phpguru.org/static/template.html
немного переделан? только тут?

Цитата:
function load_file($file_id, $filename){$this->files[$file_id] = file_get_contents($filename);}



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 03:24 22-08-2004
SafeWay



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

----------
Hosted by http://www.balthost.ee

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 03:36 22-08-2004
MAGISTRATE



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Не вижу смысла юзать такие классы шаблонизации. Php для того и Php, он
легко встраивается в html. Поэтому иногда легче написать не сильно
напрягаясь
 

Код:
<title><?=$title?></title>
<?=body?>

 
Чем
 

Код:
<title>{title}</title>
{body}

 
Т.е не надо тормозить скрипт сотней подобных классов.

----------
ага

Всего записей: 888 | Зарегистр. 23-07-2003 | Отправлено: 09:18 22-08-2004
Church



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

Цитата:
Поэтому иногда легче написать не сильно  
напрягаясь  

Ключевое слово иногда. А если ты хочешь использовать несколько скинов? ПисАть отдельные скрипты с разными дизайнами? А если ты не знаешь PHP?
Я лично пришел к выводу, что в таких случаях лучше использовать шаблонизатор, который из  
<title>{title}</title>
{body}
Делает
<title><?=$title?></title>  
<?=body?>
 
А потом уже готовый PHP-код спокойно инклюдится... В итоге, самому не нужно писАть простые, но большие PHP-коды, а достаточно отредактировать обычный HTML и получить результат...
Например, кусок шаблона регистрации:
 
[IF_ERROR]
При регистрации были обнаружены следующие ошибки:<font color="#ab0000"><b><i>
[ERROR]
<li>{T_ERROR}
[/ERROR]
</i></b></font><p>
[/IF_ERROR]
 
Преобразовывается в:
 
<?php
if ($error){
?>
При регистрации были обнаружены следующие ошибки:<font color="#ab0000"><b><i>
<?php
foreach ($error as $k=>$v){
?>
<li><?php echo $er_array[$k]?>
<?php
}
?>
</i></b></font><p>
<?php
}
?>
 
Когда его полностью доделаю - обязательно выложу... Но тем, кто не знает такого варианта - думаю, что будет полезно про него узнать

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 17:03 22-08-2004
MAGISTRATE



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Все, что ты мне написал, решается легко, гораздо легче без классов.
Чайника, может запутать не меньше такое {title}, чем просто <?=$title?>.
Я, например, не всегда понимаю в бредовом коде эдакой шаблонизации.
 
Делай хоть 20, хоть тридцать скринов. Указываешь путь к этой папке со
скином и все. Не вижу препядствий. Итого, такая шаблонизация (что ты
привел), якобы нужна, чтобы отделить html от основного кода, это
сделано в моем примере гораздо легче, шаблонизация нужна для того,
чтобы сделать кучу скинов, не вижу препядствий,вставляй в конфиг
название шаблона, шаблонизация (приведенная тобой) будет тормозить, хоть и
не на много, работу скрипта.
 

Код:
 
[IF_ERROR]
При регистрации были обнаружены следующие ошибки:<font color="#ab0000"><b><i>
[ERROR]
<li>{T_ERROR}
[/ERROR]
</i></b></font><p>
[/IF_ERROR]
 

 
Такой бред, даже я не понимаю, а если сделать что то вроде:
 

Код:
 
<BODY>
<?=content?>
</BODY>
 

Чайнику этот код покажется обычным Html.
 
А этот контент заменять внутри скрипта НЕ ИСПОЛЬЗУЯ html, то будет
гораздо легче и быстрее.
 

Код:
 
// тело скрипта, не шаблона
if($error == 1) $content = 'Error';
if($error == 0) $content = 'Добро пожаловать на мою компагу';
 

 
Если ты скажешь, что такой в моем примере текст находится внутри кода,
то этот текст можно выложить в другой файл.
 
Итого, класс шаблонизации написал чайник и все подумали: "Да, это
круто, мы вспомнили родной Бейсик". И пошло поехало... Для любой
элементарной задачи юзать классы...
 
А теперь код в целом
 
lang.php

Код:
 
$l[1] = 'Текст';
 

 
index.php

Код:
 
$content = $l[1];
 

 
template.tpl

Код:
 
<?=$content?>
 

 
У меня в коде 3 строки, а у тебя для этой же задачи будет 303. Ну
давай...


----------
ага

Всего записей: 888 | Зарегистр. 23-07-2003 | Отправлено: 17:23 22-08-2004
makarka2004

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите с ПХП нюком разобраться!

Всего записей: 2 | Зарегистр. 27-08-2004 | Отправлено: 09:44 27-08-2004
SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
makarka2004
А сюда посмотреть: http://forum.ru-board.com/forum.cgi?action=filter&forum=24&filterby=topictitle&word=nuke ?

----------
Hosted by http://www.balthost.ee

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 14:53 27-08-2004
Church



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

Цитата:
шаблонизация (приведенная тобой) будет тормозить, хоть и  
не на много, работу скрипта.  

 
И чем она будет тормозить? Преобразование происходит НЕ в момент генерации страницы, а при редактировании шаблона... Отредактировал шаблон - сгенерировался PHP-код, который просто инклюдится....
Мне лично проще испольховать "чистый" PHP+HTML без шаблонов.... Но не все знают PHP....
 

Цитата:
if($error == 1) $content = 'Error';  
if($error == 0) $content = 'Добро пожаловать на мою компагу';  

 
И дизайн для каждого условия ты тоже будешь в $content совать? Ладно, если дизайн одинаковый... А если хочешь разный? Как ни крути, а PHP придется применять.... В отличии от моего варианта...

Всего записей: 1199 | Зарегистр. 05-09-2003 | Отправлено: 13:49 08-09-2004
Sindel



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Альтернативное решение для листинга.

Код:
# Функция возвращает список файлов в каталоге (1-ый аргумент),
# исключая остальные файлы (остальные аргументы переданные в функцию).
function listing(){
$d = dir(array_shift($c = func_get_args()));
if(!is_object($d)) return array();
while($file = $d->read() !== FALSE) $array[$file] = $file;
$d->close();
unset($array['.'], $array['..']);
$array = array_diff($array, $c);  
return $array;
}

 
Самое короткое "время старта"

Код:
$start_time = array_sum(explode(' ', microtime());

 
Функция, которая удаляет из массива "плохие элементы"

Код:
# Плохие элементы - все что при проверке if'ом есть FALSE, кроме нуля.
# Пустой массив $array = array() - тоже плохой элемент
function clean($array){
foreach($array as $key => $value){
if(is_array($value)){
$value = clean($value);
if(!$value){
unset($array[$key]);
continue;
}
$b[$key] = $value;
}elseif(strlen($value) != 0){
$b[$key] = $value;
}
}
return $b;
}

Всего записей: 559 | Зарегистр. 22-08-2002 | Отправлено: 22:36 10-09-2004 | Исправлено: Sindel, 22:38 10-09-2004
Grigorev



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Хотите всегда иметь на своем сайте актуальную информацию о:
.....




:moderator:
Читаем правила! Рекламный мусор запрещён.
Ты название темы читал?
— Svarga.

Всего записей: 2 | Зарегистр. 14-07-2004 | Отправлено: 12:35 28-09-2004 | Исправлено: Svarga, 23:10 30-09-2004
Ekib



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Млин не могу войти форум мне говорит пасиб за аворизацию и каздец




Проблемы с форумом разбираются в разделе «Помощь по Ру-Борд», в частности проблемы с авторизацией — в данной теме. — Svarga.

Всего записей: 701 | Зарегистр. 13-10-2004 | Отправлено: 22:24 15-10-2004 | Исправлено: Svarga, 00:42 16-10-2004
Cheery



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

Цитата:
Млин не могу войти форум мне говорит пасиб за аворизацию и каздец

http://forum.ru-board.com/topic.cgi?forum=13&topic=0847#1

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:38 15-10-2004
kisin

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

Цитата:
$num = count($lines);  // Число записей всего.  
$perpage = 7; // Кол-во, показываемых записей на странице.  
$pages_count = @ceil($num/$perpage);  
$pages .= 'Страницы:';  
  for($j=1;$j<=$pages_count;$j++)  
 {  
 
          if ($_GET['page'] != $j)  
          {  
             $pages .= ' <a href="?page='.$j.'"><b>'.$j.'</b></a> ';  
          }  
          else  
          {  
             $pages .= ' <b>'.$j.'</b> ';  
          }  
echo $pages;
 }

 
У меня глюк: выводит 2 раза надпись "Страницы:" - в первом случае Страницы: 1, а затем Страницы: 1 2 (сообщений в бд всего 8).

Всего записей: 613 | Зарегистр. 30-12-2003 | Отправлено: 20:54 25-10-2004
SafeWay



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
kisin
1) Тут не обсуждается...
2) Ок:
$num = count($lines);  // Число записей всего.  
$perpage = 7; // Кол-во, показываемых записей на странице.  
$pages_count = @ceil($num/$perpage);  
$pages = 'Страницы:';  
  for($j=1;$j<=$pages_count;$j++)  
 {  
   
          if ($_GET['page'] != $j)  
          {  
             $pages .= ' <a href="?page='.$j.'"><b>'.$j.'</b></a> ';  
          }  
          else  
          {  
             $pages .= ' <b>'.$j.'</b> ';  
          }  
echo $pages;  
 }  
А так?

Всего записей: 365 | Зарегистр. 28-12-2003 | Отправлено: 15:38 26-10-2004
kisin

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

Цитата:
А так?

А что собственно изменилось?
 
Ок, обсуждение тут: http://forum.ru-board.com/topic.cgi?forum=31&topic=6448

Всего записей: 613 | Зарегистр. 30-12-2003 | Отправлено: 20:29 26-10-2004
KADABRA



Великий покусатель
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скрипт для распаковки zip архивов на сервере (в Unix PHP должен быть собран с --with-zip,  в Windows дожен быть подключен extension php_zip.dll из Collection of PECL modules for PHP ):

Код:
 
<?php
/*
*/
 
$zip = zip_open("e:/www/tmp/phpMyAdmin-2.6.0-pl2.zip");  // Zip file to unpack
$folder = substr(str_replace("\\", "/", __FILE__), 0, strrpos(str_replace("\\", "/", __FILE__), "/"))."/";
echo $folder."\n<br>\n";
$files = 0;
$folders = 0;
if ($zip)
{
    while ($zip_entry = zip_read($zip))
    {
        echo "<br>";
        $name = $folder . zip_entry_name($zip_entry);
        echo $name;
 
        if($name[strlen($name) - 1] == '/')
        {
            mkdir($name, 0755);
            $folders++;
        }
        elseif (zip_entry_open($zip, $zip_entry, "r"))
        {
            $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
            $file = fopen($name, "w");
            if($file)
            {
                    fwrite($file, $buf);
                    fclose($file);
                    $files++;
            }
            else
            {
                    echo "Error OPENING file $name";
            }
 
            zip_entry_close($zip_entry);
        }
 
    }
 
    echo "\n<br>Unpacked $files files and $folders folders";
 
    zip_close($zip);
 
}
else
{
    echo "<br>\n ERROR OPENING zip!";
}
 
?>
 


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

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

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
KADABRA
Небольшая приписка:
Для функций чтения zip-файлов PHP должен быть собран с опцией --with-zip

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 17:37 08-11-2004
KADABRA



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

Цитата:
Для функций чтения zip-файлов PHP должен быть собран с опцией --with-zip

Забыл указать. Спасибо.

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

Всего записей: 1718 | Зарегистр. 14-07-2003 | Отправлено: 17:40 08-11-2004
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
SiMM

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

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 20:14 05-05-2005 | Исправлено: SiMM, 20:20 05-05-2005
silhouet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
// Ф-ция возвращает $_POST без пустых полей.
<?
function clean($arg)
{
   return strlen(trim($arg));
}
 
$post = array_filter($_POST, 'clean');
?>

Всего записей: 1 | Зарегистр. 18-05-2005 | Отправлено: 11:38 19-05-2005
svserg

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Друзья!
Нужна php4apache.dll  (или php4apache-eapi.dll)
откомпиленая с опцией -DEAPI  
для apache 1.3.33 и php 4.3.11
 
Может у кого есть?





Шапку читай.. Название прочитай.. Если не помогает, то к врачу. /Cheery/

Всего записей: 393 | Зарегистр. 11-12-2001 | Отправлено: 17:37 26-05-2005 | Исправлено: Cheery, 21:28 26-05-2005
g00d

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Народ подскажите "красивое" решение....
есть массив переменных в HTTP_POST_VARS
на форме около 22-х чекбоксов, не нажатый чекбокс неотправляется т.е. такой переменной нет в этоммассиве...., а послать такую переменную в случае не нажатого чекбокса все равно надо со значением false ( потому как если он нажат, то отправляется true ) я конечно понимаю что можно перебирать весь массив и если нет заданной переменной то создавать её со значением false. но это как то не красиво...  
Спасибо.




ну, что, тебе индивидуальное замечание нужно ? /Cheery/

Всего записей: 172 | Зарегистр. 10-01-2004 | Отправлено: 08:56 27-05-2005 | Исправлено: Cheery, 09:11 27-05-2005
sket4



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
g00d:
 
if (isset($твоя переменная)) { $твоя переменная=true; } else {$твоя переменная=false; }
 
сорри за оффтоп, но помогать меня всем учили

Всего записей: 712 | Зарегистр. 07-05-2004 | Отправлено: 20:23 27-05-2005
zerkms

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
g00d
если очень хочется - то сделай хидден поля для каждого чекбокса с тем же именем, но со значением false

----------
tvfёdor - оперативно уведомляет о раздачах rutracker | Блог об иммиграции в Новую Зеландию





Хватит! Иначе прикрою тему /Cheery/

Всего записей: 387 | Зарегистр. 07-05-2004 | Отправлено: 10:53 06-06-2005 | Исправлено: Cheery, 22:03 06-06-2005
oppo

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




Надеюсь, что понятно, за что.. /Cheery/

Всего записей: 84 | Зарегистр. 02-06-2003 | Отправлено: 03:30 07-06-2005 | Исправлено: Cheery, 03:37 07-06-2005
Delphi6



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

Код:
 
<?php
  /*===============================
  Programed by Vitali
  E-mail: Administrator@GeSoft.org
  ================================*/
 
  session_start();
 
  $ServerName = 'localhost';
  $DBUserName = 'root';
  $DBPassword = '';
  $DBName = 'reg_user';
  $SessionTable = 'sessionkey';
 
  $ImageWidth = 100;
  $ImageHeight = 45;
 
  //Генерирую случайный ключ
  function GetRandomKey() {
    srand ((float) microtime() * 10000000);
    return strtoupper(md5(uniqid(rand(),true)));
  }
 
  //Процедура выбирает случайный графический файл из заданного каталога,
  //данное изображение будет использоваться как фон. Я дополнительно указал
  //фильтр *.jpg
  function LoadRandomPatern($Path) {
    $FileList = array();
    if ($Handle = opendir($Path)) {
      while (false !== ($File = readdir($Handle))) {
        if (($File !== '.')and($File !== '..')and(preg_match('/.+\.jpg/', $File))) {
          array_push($FileList, $File);
        }
      }
      closedir($Handle);
    }
    $Index = array_rand($FileList,1);
    return @imagecreatefromjpeg($Path.$FileList[$Index]);
  }
 
  //Данная функция дает возможность выводить текст "Center" и если текст не
  //помешается на изображении то она автоматом уменьшает размер шрифта
  function ImageStringCentered($Picture,$Font,$Y,$Text,$Color) {
    while (strlen($Text) * imagefontwidth($Font) > imagesx($Picture)) {
      if ($Font > 1) {
        $Font--;
      } else {
        break;
      }
    }
    imagestring($Picture,$Font,imagesx($Picture) / 2 - strlen($Text) * imagefontwidth($Font) / 2,$Y,$Text,$Color);
  }
 
  //Здесь генерируется само изображение которое пользователь уведет
  function CreateCodePicture() {
    global $ImageWidth;
    global $ImageHeight;
    global $ID;
 
    $Patern = LoadRandomPatern('patern\\');
 
    $CodeImage = imagecreate($ImageWidth,$ImageHeight);
    $TextColor = imagecolorallocate($CodeImage, 255, 255, 0);
    imagecopyresized($CodeImage,$Patern,0,0,0,0,$ImageWidth+1,$ImageHeight+1,imagesx($Patern),imagesy($Patern));
    ImageStringCentered($CodeImage, 4, 15, substr($ID, 0, 10), $TextColor);
    return $CodeImage;
  }
 
  //Функция для сохранения номера сессии, ключа и даты
  function SaveSessionKey() {
    global $ServerName;
    global $DBUserName;
    global $DBPassword;
    global $DBName;
    global $SessionTable;
    global $ID;
 
    //Получаю номер данной сессии
    $SessionID = session_id();
 
    //Попытка подключится к серверу
    if (!@mysql_connect($ServerName,$DBUserName,$DBPassword)) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    //Попытка подключится к базе данных
    if (!mysql_select_db($DBName)) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    //Пытаюсь создать таблицу для хранения ключей. Если такова существует то ничего не делаю.
    $CreateQuery = "
      CREATE TABLE `$SessionTable` (
        `ID` INT NOT NULL AUTO_INCREMENT,
        `PHPID` VARCHAR(40) NOT NULL,
        `SessionKey` VARCHAR(10) NOT NULL,
        `Date` DATE NOT NULL,
        PRIMARY KEY (`ID`)
      );";
    //Если ошибка не "Table '$SessionID' already exists"
    if ((!mysql_query($CreateQuery))and(mysql_errno()!==1050)) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    //Получаю все записи идентичные данной сессии (макс. одна, в том случае
    //если пользователь запускает скрипт повторно или сделал refresh страницы)
    $SelectQuery = "SELECT * FROM `$SessionTable` WHERE `PHPID`='$SessionID'";
    if (!($SelectResult = mysql_query($SelectQuery))) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    if (mysql_num_rows($SelectResult)>0) {
      //Запись уже существует, значит обновляем значение ключа
      $UpdateQuery = "UPDATE `$SessionTable` SET `SessionKey`='$ID' WHERE `PHPID`='$SessionID';";
      if (!mysql_query($UpdateQuery)) {
        echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b><br>';
        exit;
      }
    } else {
      //Запись пока не существует, значит добавляем значение ключа
      $InsertQuery = "INSERT INTO `$SessionTable` (`ID`, `PHPID`, `SessionKey`, `Date`) VALUES
        ('', '$SessionID', '$ID', '".date('Y-m-j')."');";
      if (!mysql_query($InsertQuery)) {
        echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b><br>';
        exit;
      }
    }
  }
 
  //Функция по проверке правильности ключа, есть ли ключ в базе
  function IsTrueKey($SessionKey) {
    global $ServerName;
    global $DBUserName;
    global $DBPassword;
    global $DBName;
    global $SessionTable;
 
    //Получаю номер данной сессии
    $SessionID = session_id();
    $SessionKey = strtoupper($SessionKey);
 
    //Попытка подключится к серверу
    if (!@mysql_connect($ServerName,$DBUserName,$DBPassword)) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    //Попытка подключится к базе данных
    if (!mysql_select_db($DBName)) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    //Получаю все записи идентичные данной сессии и ключу
    $SelectQuery = "SELECT * FROM `$SessionTable` WHERE `PHPID`='$SessionID' AND `SessionKey`='$SessionKey'";
    if (!($SelectResult = mysql_query($SelectQuery))) {
      echo '<b><font color="#FF0000">Error:</font> SaveSessionKey;</b>';
      exit;
    }
 
    if (mysql_num_rows($SelectResult)>0) {
      return true;
    } else {
      return false;
    }
  }
 
  //Проверка что должен делать скрипт, если указано что надо генерировать
  //изображение то выводит в противном случае ничего не делает (нужно в том
  //случае если скрипт вызывается с помощью include)
  if ($_GET['op']=='pic') {
    $ID = GetRandomKey();
    SaveSessionKey();
    header("Content-type: image/jpeg");
    imagejpeg(CreateCodePicture());
  }
?>
 

 
Пример пользования:

Код:
index.php
<form method="POST" action="result.php">
...
<img border="0" src="codepicture.php?op=pic" width="100" height="45">
...
 

 

Код:
result.php
include_once 'codepicture.php';
if (IsTrueKey($_POST['sessionkey'])) {
  echo 'Good key.';
} else {
  echo 'Wrong key.';
}

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 18:22 11-06-2005 | Исправлено: Delphi6, 18:27 11-06-2005
pimple



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте, уважаемые. Следующий вопрос:
хочу поставить скрипт на php (news blog 1.1-как то вроде этого называется) для
удобного добавления новостей и возможности для пользователей писать комментсы.
 
 
ЧИТАЕМ ШАПКУ И НАЗВАНИЕ ТЕМЫ!!!




Неужели у большинства проблемы со зрением? /Cheery/

Всего записей: 100 | Зарегистр. 21-09-2003 | Отправлено: 18:33 15-06-2005 | Исправлено: Cheery, 21:23 15-06-2005
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Если было не пинайте - но вроде такого невстретил...
Для меня сие открытие было откровением!
 
Если в код до вывода хидеров и контента вписать такую строчку кода - то в результате размер страницы кардинально уменьшится...

Код:
ob_start('ob_gzhandler');

ob_start()
ob_gzhandler()

Цитата:
Замечание:  In PHP 4.0.4, ob_gzhandler() was introduced to facilitate sending gz-encoded data to web browsers that support compressed web pages. ob_gzhandler()  determines what type of content encoding the browser will accept and will return its output accordingly.


----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 14:55 23-06-2005 | Исправлено: Mamay, 15:00 23-06-2005
chillz

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тот класс что давали по поводу "рисования" таблиц как в phpMyAdmin, ну уж слишком здоровый =) Да и применение класса в этом случае не обязательно.
Написал свой, состоит из одной функции.

Код:
 
function display_table($table) {
$sql = "select * from $table";
$q = mysql_query($sql);
$total = mysql_num_fields($q);
$fields = mysql_num_rows($q);
echo "<table border=1><tr>";
for($i=0;$i<$total;$i++) {  
echo "<td>" . mysql_field_name($q,$i) . "</td>";
}
echo "</tr>";
for($n=0;$n<$fields;$n++) {
echo "<tr>";
for ($k=0;$k<$total;$k++) {
echo "<td>" . mysql_result($q,$n,$k) . "</td>";
}
echo "</tr>";
}
}
 

Применение: display_table("myLETTtable");

Всего записей: 16 | Зарегистр. 23-05-2005 | Отправлено: 17:27 05-07-2005
YM1979

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




1) при чем тут PHP?
2) тема о решениях, а не идеях..
/Cheery/

Всего записей: 63 | Зарегистр. 18-12-2004 | Отправлено: 02:46 14-07-2005 | Исправлено: Cheery, 02:50 14-07-2005
CYberMaster



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Хочу реализовать на страничке обновление только определнной области. Например есть сайт, на нем небольшой логотип или кнопка помощи, при нажатии на него в небольшое по размерам место сайта загружался файл. Мой товарищь, говорит, что нужно использовать <?php include('header.php');?>. Тоесть делаем другую страничку по ссылке и грузим туда участки сайта. Я же хочу, чтобы не обновлялся весь сайт а только определнные области. Чтобы сам сайт как бы статичный оставался.
Как реализовывать???

Всего записей: 212 | Зарегистр. 02-06-2005 | Отправлено: 10:21 17-07-2005
sket4



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
CYberMaster
епрст, выше глаза поднять не в состоянии, ЗДЕСЬ ВОПРОСЫ НЕ ЗАДАЮТ
используй HTML тег <frame> или <iframe>

Всего записей: 712 | Зарегистр. 07-05-2004 | Отправлено: 13:47 17-07-2005 | Исправлено: sket4, 13:48 17-07-2005
DeADMoHAX



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

Код:
 
<?php
if(!empty($_POST["ip"]))
{
$sock = fsockopen("whois.ripe.net", 43, $errno, $errstr);
if (!$sock)
{
echo("$errno($errstr)");
return;
}
else
{
fputs ($sock, $_POST["ip"]."\r\n");
while (!feof($sock))
{
echo (str_replace(":",":&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", fgets ($sock, 128))."<br>");
}
}
fclose ($sock);
}
?>
 


----------
dmlabs.ru || hackconnect.ru
Выгодно России – значит, хорошо. Не выгодно России – пошёл на хер.

Всего записей: 1367 | Зарегистр. 03-02-2005 | Отправлено: 20:09 28-07-2005
ripperm



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
chillz
Ну что за мания усложнять простые вещи...  Скока раз сталкиваюсь все время прикалываюсь. Не прще ли немного будет поитав ман по SQL выяснить что бля получения полей есть замечательный запрос... и даже функции не надо
 
$res = mysql_query("show fields from table1");
echo "<table><tr>";
while($arr = mysql_fetch_array($res))
{
echo "<td>{$arr['Field']}</td>";
}
echo "</tr></table>";
 
 
Не правда ли все намного короче и проще?
 
Добавлено:

Цитата:
Спокойнее, плиз. Тот вариант для любой таблицы без знания столбцов в ней. Аналогия, как и сказано, с myPHPadmin /Cheery/
ps: и толку от нее больше, чем от твоего примера.

Прости пожалуйста за манеру разговаривать, Еще я хронической безграмотрстью страдаю...
 
Да. Кое чего не заметил.. Вывод данных из таблиц. =) Ночное время влияет так сказать.
сори за оффтоп...  Хотя вывод данных из таблиц дописывается ровно в три строчки к моему скрипту... Поправь если я не прав =)




Спокойнее, плиз. Тот вариант для любой таблицы без знания столбцов в ней. Аналогия, как и сказано, с myPHPadmin /Cheery/
ps: и толку от нее больше, чем от твоего примера.

Всего записей: 302 | Зарегистр. 03-06-2002 | Отправлено: 03:04 08-08-2005 | Исправлено: ripperm, 02:58 14-08-2005
foxweb



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема:
импортировать 9мб SQL-скрипт (дамп MySQL), если обычными споcобами (загрузка через web-интерфейс phpMyAdmin, Backup cPanel) проблематично, особенно на модемемном соединении.
 
Решение
можно залить на ftp и попросить админов восстановить базу, но не факт, что вам помогут. Можно попробовать через MySQL клиент типа SQLyog, MySQL-Front и т.д., но опять же не факт, что это закончится благополучно...
 
Перепробовав все перечисленные способы, я выяснил, что основная проблема - непрерывная передача 9мб файла.
 
И решил написать простенькую утилиту на PHP, которая будет читать SQL-файл построчно, точнее покомандно: выбирает команду (ограниченную точкой-с-запятой, исполняет её, и так далее). То есть все операции происходят внутри сервера, без участия клиента. Скорость бешеная, 9мб SQL-скрипт за 5 секунд!!! Ессесно файлик должен лежать там же, где скрипт.
 
Минусы
занимает большое количество ресурсов сервера, весь файл читается в память. Можно усовершенствовать, читая из файлового только отдельные SQL-команды.
 

Код:
<?php
 
mysql_connect("localhost", "login", "password");
mysql_select_db ("database");
 
if (!file_exists($fname)) die ("Файл $fname не существует!");
$fp = fopen ($fname, "r");
$buffer = fread($fp, filesize($fname));
fclose ($fp);
 
$prev = 0;
 
while ($next = strpos($buffer,";",$prev+1))
{
$i++;
$a = substr($buffer,$prev+1,$next-$prev);
mysql_query($a);
$prev = $next;
}
 
echo "Выполнено $i команд";
 
?>
 

 
Что-то вроде этого.
 
$fname - имя файла SQL-дампа
$prev - позиция предыдущей ";"
$next - позиция следующей ";" начиная с позиции $prev
 
Вызываем скрипт примерно так: sqlbackup.php?fname=backup.sql, будет выполнен файл backup.sql. В конце выводится число выполненных команд. Я замеряю время выполнения, здесь для упрощения убрал.

Всего записей: 8 | Зарегистр. 08-08-2005 | Отправлено: 18:24 08-08-2005
ripperm



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
foxweb
Хотел заметить, что такой вариант не отработает у тебя при встрече ; в самом запросе. Тогда он выполнит половину запроса до ; и естественно вернется ошибка.
 
Так же как и при дампе базы я бы просто лимитировал обьемы записываемые за одно обращение. Т.е.  записал мегабайт в базу например пошел далее. И ресурсы такое меньше жрет...  
 
Если exec на серваке не в бане тогда вообще пара строк нужна
exec("mysql -uusername -ppass") и т.п. )

Всего записей: 302 | Зарегистр. 03-06-2002 | Отправлено: 02:56 14-08-2005
foxweb



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, всё вполне логично.
Я делал, что разбиение на запросы производилось не просто по ";", а по ";\n"
Хотя то же не очень универсально.
По поводу exec - отличная идея, но скрипт был написан прежде, чем разобрался с ней

Всего записей: 8 | Зарегистр. 08-08-2005 | Отправлено: 02:01 28-08-2005
oppo

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
..вывод  
<? phpinfo();
 
include("../class.Thumbnail.php");  
$tn_image = new Thumbnail("sample.gif", 0, 0, 25);  
 
 
 
$tn_image->show();  
 
 
?>  
 
 
<?  
/*  
* class.Thumbnail.php  
*  
* Copyright (C) 2001 Hidayet Dogan (hdogan@bilcag.net)  
*  
* This program is free software; you can redistribute it and/or modify  
* it under the terms of the GNU General Public License as published by  
* the Free Software Foundation; either version 2, or (at your option)  
* any later version.  
*  
* This program is distributed in the hope that it will be useful,  
* but WITHOUT ANY WARRANTY; without even the implied warranty of  
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  
* GNU General Public License for more details.  
*  
* You should have received a copy of the GNU General Public License  
* along with this program; if not, write to the Free Software  
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  
*  
*/  
 
class Thumbnail {  
    var $errmsg        = "";  
    var $error        = false;  
    var $format        = "";  
    var $file        = "";  
    var $max_width  = 0;  
    var $max_height = 0;  
    var $percent    = 0;  
 
    function Thumbnail($file, $max_width = 0, $max_height = 0, $percent = 0) {  
    if (!file_exists($file)) {  
        $this->errmsg = "File doesn't exists";  
        $this->error  = true;  
    }  
    else if (!is_readable($file)) {  
        $this->errmsg = "File is not readable";  
        $this->error  = true;  
    }  
 
    if (strstr(strtolower($file), ".gif"))  
        $this->format = "GIF";  
    else if (strstr(strtolower($file), ".jpg") ||  
         strstr(strtolower($file), ".jpeg"))  
        $this->format = "JPEG";  
    else if (strstr(strtolower($file), ".png"))  
        $this->format = "PNG";  
    else {  
        $this->errmsg = "Unknown file format";  
        $this->error  = true;  
    }  
 
    if ($max_width == 0 && $max_height == 0 && $percent == 0)  
        $percent = 100;  
 
    $this->max_width  = $max_width;  
    $this->max_height = $max_height;  
    $this->percent      = $percent;  
    $this->file      = $file;  
    }  
 
    function calc_width($width, $height) {  
    $new_width  = $this->max_width;  
    $new_wp     = (100 * $new_width) / $width;  
    $new_height = ($height * $new_wp) / 100;  
    return array($new_width, $new_height);  
    }  
 
    function calc_height($width, $height) {  
    $new_height = $this->max_height;  
    $new_hp     = (100 * $new_height) / $height;  
    $new_width  = ($width * $new_hp) / 100;  
    return array($new_width, $new_height);  
    }  
 
    function calc_percent($width, $height) {  
    $new_width  = ($width * $this->percent) / 100;  
    $new_height = ($height * $this->percent) / 100;  
    return array($new_width, $new_height);  
    }  
 
    function return_value($array) {  
    $array[0] = intval($array[0]);  
    $array[1] = intval($array[1]);  
    return $array;  
    }  
 
    function calc_image_size($width, $height) {  
    $new_size = array($width, $height);  
 
    if ($this->max_width > 0) {  
        $new_size = $this->calc_width($width, $height);  
 
        if ($this->max_height > 0) {  
        if ($new_size[1] > $this->max_height)  
            $new_size = $this->calc_height($new_size[0], $new_size[1]);  
        }  
 
        return $this->return_value($new_size);  
    }  
 
    if ($this->max_height > 0) {  
        $new_size = $this->calc_height($width, $height);  
        return $this->return_value($new_size);  
    }  
 
    if ($this->percent > 0) {  
        $new_size = $this->calc_percent($width, $height);  
        return $this->return_value($new_size);  
    }  
    }  
 
    function show_error_image() {  
    header("Content-type: image/png");  
    $err_img   = ImageCreate(220, 25);  
    $bg_color  = ImageColorAllocate($err_img, 0, 0, 0);  
    $fg_color1 = ImageColorAllocate($err_img, 255, 255, 255);  
    $fg_color2 = ImageColorAllocate($err_img, 255, 0, 0);  
    ImageString($err_img, 3, 6, 6, "ERROR:", $fg_color2);  
    ImageString($err_img, 3, 55, 6, $this->errmsg, $fg_color1);  
    ImagePng($err_img);  
    ImageDestroy($err_img);  
    }  
 
    function show() {  
    if ($this->error) {  
        $this->show_error_image();  
        return;  
    }  
 
    $size      = GetImageSize($this->file);  
    $new_size  = $this->calc_image_size($size[0], $size[1]);  
    $new_image = ImageCreate($new_size[0], $new_size[1]);  
 
    switch ($this->format) {  
        case "GIF":  
        $old_image = ImageCreateFromGif($this->file);  
        break;  
        case "JPEG":  
        $old_image = ImageCreateFromJpeg($this->file);  
        break;  
        case "PNG":  
        $old_image = ImageCreateFromPng($this->file);  
        break;  
    }  
 
    ImageCopyResized($new_image, $old_image, 0, 0, 0, 0, $new_size[0], $new_size[1], $size[0], $size[1]);  
 
    switch ($this->format) {  
        case "GIF":  
        header("Content-type: image/gif");  
        ImageGif($new_image);  
        break;  
        case "JPEG":  
        header("Content-type: image/jpeg");  
        ImageJpeg($new_image);  
        break;  
        case "PNG":  
        header("Content-type: image/png");  
        ImagePng($new_image);  
        break;  
    }  
 
    ImageDestroy($new_image);  
    ImageDestroy($old_image);  
    return;  
    }  
}  
?>  
клысс для генерации тумб

Всего записей: 84 | Зарегистр. 02-06-2003 | Отправлено: 17:11 28-08-2005
Shaun



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Я решил чет сам написать и прошу вашей помощи!! Проблема и задача такова!
Маленький скриптик добавления в БД запись фильма и т.д. и т.п.
 
--1--add.php
<html>
<head><title>add_film</title></head>
 
<body bgcolor=#e9e9e9>
<center><h1>????????</h1></center>
 
<form method="post" action="insert_bd.php">
<table border=1>
<tr><td>Название фильма</td><td><input type="text" name="film" size="45"><br></td>
<tr><td>Актер</td><td><input type="text" name="akter" size="45"><br></td>
<tr><td>Жанр</td><td><input type="text" name="ganr" size="45"><br></td>
<tr><td>Размер</td><td><input type="text" name="size" size="45"><br></td>
</tr>
</table>
<br>
<input type="submit" name="add" size="15"><br>
<br>
</form>
 
<a href=.\index.php>Go BacK</a>
</body>
</html>
 
--2--insert_bd.php
<?php
$film = "film";
$akter = "akter";
$ganr = "ganr";
$size = "size";
 
$link = mysql_connect("localhost", "film", "film") or
    die("Could not connect: " . mysql_error());
 
 
         mysql_select_db("film");
 
$query = "insert into bd_films values ('".$film."', '".$akter."', '".$ganr."', '".$size."')";
$result = mysql_query($query);
printf ("Last inserted record has id %d\n", mysql_insert_id());
 
     mysql_close($link);
?>
 
 
Бд создана! все ок !! А добавлять не хочет!! НЕ найду ошибку !Помагите плз)))Де то ,что то не написал!




Посмотри на верх, там специально выделено красным, для тех у кого проблемы со зрением..

Всего записей: 180 | Зарегистр. 01-05-2003 | Отправлено: 22:56 11-09-2005
zoza



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
$film = "film";  
на
$film = $_POST['film'];  
 
и так все...
 
только щас в лоб дадут... за вопрос не в теме.... и мне тоже..  

Всего записей: 131 | Зарегистр. 24-01-2004 | Отправлено: 02:01 12-09-2005 | Исправлено: zoza, 02:04 12-09-2005
MOFA



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если register_globals= Off:
 

Код:
 
$hash= $HTTP_GET_VARS;
foreach ($hash as $key=>$value){
$$key= $value;
}
 






для этого есть просто функция extract /Cheery/
ps: и не нужно давать того, в чем сам не разбираешься.. HTTP_GET_VARS устаревшее обращение

Всего записей: 20 | Зарегистр. 29-01-2005 | Отправлено: 12:08 17-09-2005 | Исправлено: Cheery, 07:58 19-09-2005
Zver1992

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




Еще раз.. для тех, кому нужны очки.. в шапке сказано, что "вопросы тут(!!!) НЕ(!!) задаются" /Cheery/

Всего записей: 599 | Зарегистр. 30-10-2004 | Отправлено: 21:27 30-09-2005 | Исправлено: Zver1992, 21:41 30-09-2005
zergussino



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Не раз сталкивался с проблемой, что надо скачать все фотки с галереи где фотки можно открыть как, например, здесь http://people.freenet.de/leah01/1.jpg
Написал в результате простенький скрипт который это делает. Скрипт сырой, но может кому-нибудь сэкономит 20 минут времени. Кстати, если кто знает как добиться вывода сообщений в процессе его работы, а не по его завершению  - киньте совет на мыло zergussino [собака] mail.ru
<?
set_time_limit(0);
function wwwcopy($file,$nfile)
{
  echo "Читаем <b>".addslashes($file)."</b> ...<br />";
   $fp = @fopen($file,"rb");
   while(!feof($fp))
   {
       $cont.= fread($fp,1024);
   }
   fclose($fp);
  echo "Пишем <b>".addslashes($nfile)."</b> ...<br />";
   $fp2 = @fopen($nfile,"w");
   fwrite($fp2,$cont);
   fclose($fp2);
}
 
$server_name = 'http://урл_хоста/';
$local_directory = "C:/локальная_директория/";
$file_template = '%s.jpg';
 
 
for ($i=$_GET['start'];$i<$_GET['end'];$i++){
  wwwcopy($server_name.sprintf($file_template, $i), $local_directory.sprintf($file_template, $i));
}
?>

Всего записей: 15 | Зарегистр. 23-06-2005 | Отправлено: 19:39 18-10-2005
ManHunter



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Столкнулся с задачей динамической подгрузки контента на страницу (длиннющие списки).
Решил ее следующим образом:
 
На странице:

Код:
<script>
function findObj(id) {
  if(document.all)
    return document.all[id];
  else
    return document.getElementById(id);
}
 
function branch(id) {
  e=findObj('s'+id);
  if (!e) return;
  e.innerHTML="<b>Подождите, идет загрузка...</b>";
  e.style.display='block';
  e=findObj('loader');
  if (!e) return;
  e.src="branch.php?id="+id;
}
</script>
 
<span onClick="javascript:branch(1);">Первый</span><br>
<span id="s1" style="display:none; padding-left:20px;">&nbsp;</span>
<span onClick="javascript:branch(2);">Второй</span><br>
<span id="s2" style="display:none; padding-left:20px;">&nbsp;</span>
<span onClick="javascript:branch(3);">Третий</span><br>
<span id="s3" style="display:none; padding-left:20px;">&nbsp;</span>
 
<iframe id="loader" src="about:blank" vspace="0" hspace="0" marginwidth="0" marginheight="0" frameborder="0" height="0" scrolling="no" width="0"></iframe>

 
"Подгрузчик" branch.php, принимает из командной строки некий id, по которому генерит список:
Код:
<?
$id=intval($_GET[id]);
if ($id==0) exit;
?>
<html>
<body onLoad="javascript:set_branch();">
 
<script>
function findObj(id) {
  if(document.all)
    return document.all[id];
  else
    return document.getElementById(id);
}
function set_branch() {
  e=findObj('branch');
  if (!e) return;
  p=(parent.document.all?parent.document.all['s<?=$id;?>']:parent.document.getElementById('s<?=$id;?>'));
  if (!p) return;
  p.innerHTML = e.innerHTML;
}
</script>
 
<span id="branch">
Здесь список, который генерится динамически,
можно делать неограниченные уровни вложений, просто добавлять поля
как на основной странице, но со своими id, типа  
 
<span onClick="javascript:branch(<?=some_id;?>);">Первый</span><br>
<span id="s<?=some_id;?>" style="display:none; padding-left:20px;">&nbsp;</span>
 
</span>
 
</body>
</html>


----------
"На любое мое движение ваша реакция предусмотрена,
В лучшем случае - равнодушие, в худшем случае - патология..." (C) Егор Летов

Всего записей: 3091 | Зарегистр. 20-03-2004 | Отправлено: 14:30 25-10-2005
Rendom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Способ генерации случайного числа (или даже последовательности случайных чисел) неменяющимся в течении определенного времени (час, 2, сутки... любого).

Код:
<?
    $REGEN_TIME = 3600*24*1; //Время в течении которого пследовательность случайных чисел не должна меняться в секундах.
    srand(floor(time()/$REGEN_TIME));
?>
 

после данного кода любой вызов функции rand() в течении суток будет выдавать одинаковые последовательности чисел... Где применять? Ну это каждый сам для себя решит... Передомоной когдато стояла задача генерировать сайт разный раз в неделю помоему... и при этом на винт желательно ничего не писать (места мало было ), вот я и выкрутился так....

Всего записей: 115 | Зарегистр. 27-10-2002 | Отправлено: 04:06 01-11-2005
UvazHai



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, помогите, плз...
 
У меня два вопроса, выручайте
 





К доктору обращался? За очками. Большими и красными буквами в шапке написано, что здесь не задают вопросы! /Cheery/

Всего записей: 32 | Зарегистр. 09-06-2003 | Отправлено: 14:54 04-11-2005 | Исправлено: Cheery, 22:03 04-11-2005
Ternik



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
к вопросу о классе Thumbnails, линк на оригинал
http://www.hido.net/projects/phpThumbnailer/
 
также хочу поделиться очень замечательным классом для работы с XML документами.
MiniXML
http://minixml.psychogenic.com/index.html
на сайте предоставлена вся API документация.
 
Добавлено:
2Cheery
 
Добавлено:
ну и раз пошла волна, то еще добавлю от себя:
небольшой код, который вырезает из выходного HTML скрипта все лишние пробелы, табуляции и HTML комментарии. Просто поместитие это в начало скрипта, правда включается буферизация вывода.

Код:
 
function callback ($buffer) {
//Отсекаем лишнее
 $patterns = array ( "/<!--.{0,}-->/", "/<!--.{0,}-->/", "/ {2,}/", "/\t{1,}/", "/\r\n/", "/^\s{1,}/m");
 $replaces = array ( "", "", " ", " ", "\n", "");
//Возвращаем буфер
 return( preg_replace ($patterns, $replaces, $buffer ) );
}
//Буферизация вывода
ob_start("callback");
 

Всего записей: 763 | Зарегистр. 25-09-2002 | Отправлено: 02:05 08-11-2005 | Исправлено: Ternik, 05:26 08-11-2005
morjov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ternik, если бы твой скрипт ещё и скрипты со стилями не трогал, то цены бы ему не было




Личные обращения не теме - в ПМ, плиз. /Cheery/

Всего записей: 341 | Зарегистр. 05-01-2004 | Отправлено: 15:52 08-11-2005 | Исправлено: Cheery, 23:55 08-11-2005
dartvaider



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
НАРОД подскажите плиз есть ли где нибуть скрипт новостей на php который черпает новости с RSS 2.0
ОЧЕНЬ НАДО




советую обратиться к врачу за очками. в шапке все об этом сказано /Cheery/

Всего записей: 534 | Зарегистр. 31-08-2005 | Отправлено: 11:08 01-12-2005 | Исправлено: Cheery, 21:44 01-12-2005
hacsoft

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Функция обработки BB-кодов однопроходная:

Код:
function protection ($text)
// Замена опасных символов:
{
    return str_replace (array("&", "'", "\"", "<", ">"), array("&amp;", "&#39;", "&quot;", "&lt;", "&gt;"), $text);
}
 
function check_url ($url)
// Корректироваа URL-адреса:
{
    return preg_match ("#^(http://|https://|ftp://|mailto#", $url)
        ? $url
        : $url = "http://" . str_replace (":", "%3A", $url);
}
 
$colors = array(
        "darkred" => 1,
        "red" => 1,
        "orange" => 1,
        "brown" => 1,
        "yellow" => 1,
        "green" => 1,
        "olive" => 1,
        "cyan" => 1,
        "cyan" => 1,
        "blue" => 1,
        "darkblue" => 1,
        "indigo" => 1,
        "violet" => 1,
        "white" => 1,
        "silver" => 1,
        "gray" => 1,
        "black" => 1);
 
function bb_codes ($text, $smiles)
// Обработка BB-кодов:
{
    global $colors;
    $text = str_replace ("`", "'", $text);
    $codes = array();
    $cnum = 0;
    $res = "";
    $p = 0;
    while ( true )
    {
        if ( ($l = strpos ($text, "[", $p)) === false )
        {
            $res .= substr ($text, $p);
            break;
        }
        if ( ($r = strpos ($text, "]", $l)) === false )
        {
            $res .= substr ($text, $p);
            break;
        }
        $res .= substr ($text, $p, $l - $p);
        $tag = substr ($text, $l + 1, $r - $l - 1);
        if ( ($e = strpos ($tag, "=")) !== false )
        {
            $val = substr ($tag, $e + 1);
            $tag = substr ($tag, 0, $e);
        } else $val = "";
        $c = $p = $r;
        while ( ($c = strpos ($text, "[/$tag]", $c + 1)) !== false &&  
            ($p = strpos ($text, "[$tag]", $p + 1)) !== false && $p < $c );
        if ( $c === false )
        {
            $res .= "[";
            $p = $l + 1;
            continue;
        }
        $con = substr ($text, $r + 1, $c - $r - 1);
        $err = true;
                
        if ( $tag === "b" )
        { // Жирный:
            $con = "<b class=\"bb\">" . bb_codes ($con, $smiles) . "</b>";
            $err = false;
        } elseif ( $tag === "i" )
        { // Курсив:
            $con = "<i class=\"bb\">" . bb_codes ($con, $smiles) . "</i>";
            $err = false;
        } elseif ( $tag === "u" )
        { // Подчеркнутый:
            $con = "<u class=\"bb\">" . bb_codes ($con, $smiles) . "</u>";
            $err = false;
        } elseif ( $tag === "center" )
        { // По центру:
            $con = "<div align=\"center\" class=\"bb\">" . bb_codes ($con, $smiles) . "</div>";
            $err = false;
        } elseif ( $tag === "right" )
        { // По правому краю:
            $con = "<div align=\"right\" class=\"bb\">" . bb_codes ($con, $smiles) . "</div>";
            $err = false;
        } elseif ( $tag === "color" )
        { // Цвет шрифта:
            $val = strtolower ($val);
            if ( isset ($colors[$val]) || preg_match ("/^#[0-9a-f]{6}$/", $val) )
            {
                $con = "<font color=\"$val\" class=\"bb\">" . bb_codes ($con, $smiles) . "</font>";
                $err = false;
            }
        } elseif ( $tag === "size" )
        { // Размер шрифта:
            if ( preg_match ("#^[1-7]$#", $val) )
            {
                $con = "<font size=\"$val\" class=\"bb\">" . bb_codes ($con, $smiles) . "</font>";
                $err = false;
            }
        } elseif ( $tag === "no" )
        { // Не обрабатывать BB-коды:
            $con = nl2br (protection ($con));
            $err = false;
        } elseif ( $tag === "code" )
        { // Исходный код:
            if ( ! empty ($con) )
            {
                $comment = protection (( empty ($val) ) ? "Code:" : "Code ($val):");
                $con = protection ($con);
                $con = "<table width=\"90%\" class=\"code\"><tr><th>$comment</th></tr><tr><td><pre class=\"bb\">$con</pre></td></tr></table>";
            }
            $err = false;
        } elseif ( $tag === "quote" )
        { // Цитата:
            if (! empty ($con) )
            {
                $comment = protection (( empty ($val) ) ? "Quote:" : "$val wrote:");
                $con = "<table width=\"90%\" class=\"quote\"><tr><th>$comment</th></tr><tr><td>" .
                    bb_codes ($con, $smiles) . "</td></tr></table>";
            }
            $err = false;
        } elseif ( $tag === "img" )
        { // Вставка картинки:
            if ( strpos ("?", $con) === false && preg_match ("#.(gif|png|jpg|jpeg|tiff)$#", $con) )
            {
                $title = empty ($val) ? "" : " title=\"" . protection ($val) . "\"";
                $con = protection (check_url ($con));
                $con = "<img src=\"$con\" alt=\"$con\"$title class=\"bb\" />";
                $err = false;
            }
        } elseif ( $tag === "url" )
        { // Вставка гиперссылки:
            $href = protection (check_url (empty ($val) ? $con : $val));
            if ( ! empty ($val) ) $con = bb_codes ($con, $smiles);
            $con = "<a href=\"$href\" target=\"_blank\" class=\"bb\">$con</a>";
            $err = false;
        }
        if ( $err === true )
        {
            $res .= "[";
            $p = $l + 1;
            continue;
        }
        
        $cd = "`" . (++$cnum) . "`";
        $codes[$cd] = $con;
        $res .= $cd;
        $p = $c + strlen ($tag) + 3;
    }
    
    // Подсветка ссылок:
    $prot = array ("http://", "https://", "ftp://", "www.");
    $ahref = array();
    for ($i = 0; $i < count ($prot); $i++)
    {
        $p = 0;
        while ( true )
        {
            $p = strpos ($res, $prot[$i], $p);
            if ( $p === false ) break;
            $url = $prot[$i];
            $p += strlen ($url);
            while ( $p < strlen ($res) && preg_match ("([0-9a-zA-Z_\\-+%&?:@.\\=/#])", $res[$p]) ) $url .= $res[$p++];
            $cd = "`" . (++$cnum) . "`";
            $ahref[$url] = $cd;
            $url = protection ($url);
            $href = ( $prot[$i] === "www." ) ? "http://$url" : $url;
            $codes[$cd] = "<a href=\"$href\" target=\"_blank\" class=\"bb\">$url</a>";
        }
    }
    $res = str_replace (array_keys ($ahref), array_values ($ahref), $res);
    
    // Замена смайликов:
    foreach ($smiles as $smile => $img)
    {
        $cd = "`" . (++$cnum) . "`";
        $sm = protection ($smile);
        $codes[$cd] = "<img src=\"$img\" alt=\"$sm\" title=\"$sm\" class=\"smile\" />";
        $smiles[$smile] = $cd;
    }
    $res = str_replace (array_keys ($smiles), array_values ($smiles), $res);
        
    return str_replace (array_keys ($codes), array_values ($codes), nl2br (protection ($res)));
}

Доступны следующие псевдотеги:
[b]text[/b] - жирный
[i]text[/i] - курсив
[u]text[/u] - подчеркнутый
[center]text[/center] - по центру
[right]text[/right] - справа
[color=#ffffff]text[/color], [color=red]text[/color] - цвет текста
[size=5]text[/size] - размер шрифта
[code]text[/code], [code=Pascal]text[/code] - исходный код (нуждается в корректировки, определяется стилями)
[quote]text[/quote], [quote=username]text[/quote] - цитата (определяется стилями)
[img]src[/img], [img=title]src[/img] - картинка
[url]href[/url], [url=href]text[/url] - ссылка
[nо]text[/nо] - отмена действия BB-кодов.
 
Автоматически подсвечиваются ссылки, начинающиеся с http://, https://, ftp://, www.
Смайлики передавать в виде хэш-массива: ключи - мнемоника смайла, значение - путь к картинки.
Работает не очень быстро, но корректно. Если ее модифицировать в двупроходную, то скорость будет хорошей.
 
И вот функция, вырезающая все BB-коды из сообщения, оставляющая только текст:

Код:
function no_bb ($text, $smiles)
// Удаление bb-кодов:
{
    // Вырезаем блоки qoute и code:
    $remove = array ("quote", "code");
    for ($i = 0; $i < count ($remove); $i++)
    {
        $l = 0;
        do
        {
            $l = $r = $p = strpos ($text, "[{$remove[$i]}", $l);
            if ( $l !== false )
            {
                while ( ($r = strpos ($text, "[/{$remove[$i]}]", $r + 1)) !== false &&  
                    ($p = strpos ($text, "[{$remove[$i]}", $p + 1)) !== false && $p < $r );
                if ( $r !== false ) $text = substr ($text, 0, $l) . substr ($text, $r + strlen ($remove[$i]) + 3);                
            }
        } while ( $l !== false );
    }
 
    // Вырезаем смайлики:
    $text = str_replace (array_keys ($smiles), "", $text);
    
    // Вырезаем все псевдотеги:
    $l = 0;
    do
    {
        $l = strpos ($text, "[", $l);
        if ( $l !== false )
        {
            $r = strpos ($text, "]", $l);
            if ( $r !== false ) $text = substr ($text, 0, $l) . substr ($text, $r + 1);
        }
    } while ( $l !== false && $r !== false );
    
    return nl2br (protection ($text));
}

Всего записей: 116 | Зарегистр. 18-11-2005 | Отправлено: 16:11 03-12-2005
Buffi1

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




:moderator: лечиться нужно, пока не поздно /Cheery/

Всего записей: 1 | Зарегистр. 22-12-2005 | Отправлено: 17:15 22-12-2005 | Исправлено: Cheery, 19:13 22-12-2005
Ternik



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

Цитата:
лечиться нужно, пока не поздно /Cheery/

а вы посты не удаляете что-ли?




А вы правила не читаете? По поводу сообщений в ПМ /Cheery/

Всего записей: 763 | Зарегистр. 25-09-2002 | Отправлено: 23:15 28-12-2005 | Исправлено: Cheery, 23:17 28-12-2005
DenDruiD



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Функция для вывода списка файлов в данной дериктоии и ниже. Форматировать по вкусу.

Код:
 
function browse_tree($npath, $ipath, $showhtfiles=false){
   $op="";
   $notadir=array(".", "..");
   $dir=opendir($npath);
   while ($file=readdir($dir)){
     // если стоит опция не показывать файлы вроде ".htaccess" - проверяем
     $stripped_as_ht=($showhtfiles) ? false : (substr($file,0,1)==".") ;
   
     // если это не "." и не ".."
     if ((filetype($npath.$file)=="dir")&&(!in_array($file, $notadir)){
        $nipath="$ipath/$file";
        browse($npath.$file."/", $nipath);
     } else if ((!in_array($file,$notadir)) && (!$stripped_as_ht)) {
        $op.="$ipath/$file\n";
     }
   }
// При необходимости - раскомментировать следующую строку
// $op=nl2br($op);
   return $op;
}
 






Примеры внизу /Cheery/

Всего записей: 51 | Зарегистр. 31-01-2005 | Отправлено: 20:51 09-01-2006 | Исправлено: Cheery, 20:56 09-01-2006
StirolXXX



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

Цитата:
Функция обработки BB-кодов однопроходная:  

 
Большое спасибо!
 
Называйте меня извращенйом но я пишу свои сайты так:
 
index.php:

Код:
 
<?php
    require ".htfun/global.php";
    $title = "";
    require ".htempl/start.php";
    if (isset($_GET['module']) && !empty($_GET['module'])) {
        error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING);
        if (!include(untag($_GET['module']) . '.content')) {
        echo "Извините но такого модуля нет!";
        };
        error_reporting(E_ALL ^ E_NOTICE);
    } else {
        include('index.content');
    };
    require ".htempl/end.php";
?>
 

 
index.content

Код:
 
<p>***</p>
<?
echo "blablabla";
?>
<font class="suxx">***</font>
 

 
В .htfun/global.php ничего интерестного нету. Решение для новичков но главное что работает :)
 
P.S: Там где выделено красны - функция с этого топика...

Всего записей: 1690 | Зарегистр. 14-03-2004 | Отправлено: 02:56 10-01-2006
CyClon

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Интеграция самописного движка с форумом IPB 2.1.3
 
Кусок кода из mainfile.php  

Код:
/* Если у пользователя в COOKIE прописан параметр `id`, то запускаем проверку на совпадение пароля и идентификатора */  
 
if(!empty($_COOKIE['member_id'])) {  
require_once("includes/check.php");  
if($check_ok != 1) {  
echo "<b>Доступ запрещен!<b>\n";  
include("includes/redir_index.php");  
exit;  
}  
} else {  
 
$user_name = "Гость";  
$user_align = 0;  
 
}

 
check.php  

Код:
<?php  
 
$user_id = $_COOKIE['member_id'];  
$user_password = $_COOKIE['pass_hash'];  
 
$check_query = "SELECT * FROM ".$fp."members WHERE id = ".$user_id." AND member_login_key = '$user_password'";  
$check = mysql_query($check_query) or die("<b>Ошибка подключения к базе данных!</b><br>");
 
if ($check) { $check_ok = 1; } else { $check_ok = 0; }  
 
if ($check_ok == 1) {  
 
$user_data = mysql_fetch_array($check);  
 
$user_name = $user_data['name'];  
$user_email = $user_data['email'];  
$user_joined = $user_data['joined'];  
$user_login_key = $user_data['member_login_key'];  
$user_align = $user_data['mgroup'];  
 
$md5_key = md5($user_email.'&'.$user_login_key.'&'.$user_joined);  
 
}  
 
?>

 
Кусок кода из шакпи (Оформление) сайта header.php

Код:
<?php if (isset($check_ok) || $check_ok == 1) { ?>  
<table border=0><tbody><tr><td align=center>Да пребудет с тобой сила,&nbsp;<B><?php echo $user_name; ?>!</B>&nbsp;<BR>[ <a href="forum/index.php?act=Login&CODE=03&k=<?php echo $md5_key; ?>">Выход</a>&nbsp;|&nbsp;<a href="forum/index.php?act=UserCP&CODE=00">Профиль</a> ]</td></tr></tbody></table>  
<?php } else { ?>  
<form action="forum/index.php?act=Login&amp;CODE=01" method="post" name="LOGIN"><TABlE border=0><TBODY>  
<TR><TD ColSpan=2>Логин | <a href="forum/index.php?act=Reg&CODE=00">Регистрация</a></TD></TR>  
<TR><TD ColSpan=2><input type="text" size="25" maxlength="64" name="UserName"></TD><TR>  
<TR><TD ColSpan=2>Пароль | <a href="forum/index.php?act=Reg&CODE=10">Забыли?</TD></TR>  
<TR><TD>  
<input type="password" size="15" name="PassWord"></TD><TD><INPUT TYPE="submit" name="submit" value="Войти">  
<input type="hidden" name="CookieDate" value="1">  
<input type="hidden" name="Privacy" value="0">  
</TD></TR>  
</TBODY></TABLE></FORM>  
<?php } ?>

Всего записей: 13 | Зарегистр. 11-01-2006 | Отправлено: 13:38 11-01-2006
StirolXXX



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
CyClon
<offtopic>
А ниче подобного для vBulletin 3.5 нету?  
</offtopic>




Личные вопросы - в ПМ.. не нужно засорять топик /Cheery/

Всего записей: 1690 | Зарегистр. 14-03-2004 | Отправлено: 01:50 12-01-2006 | Исправлено: Cheery, 01:51 12-01-2006
CyClon

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
StirolXXX
<offtopic>  
Я поклонник IPB и делал сам, поэтому ничего сказать не могу.
</offtopic>





Ну я же сделал по этому поводу замечание выше. Млин.. /Cheery/
2ALL: надоело.. если так и будет продолжаться - тему закрою и посты будут только через меня/

Всего записей: 13 | Зарегистр. 11-01-2006 | Отправлено: 16:01 12-01-2006 | Исправлено: Cheery, 17:52 12-01-2006
Dbimzon

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пожалуйста подскажите, где можно взять готовое решение для вывода погоды в текстовом виде на сайт? Спасибо.




к окулисту.. мигом /Cheery/

Всего записей: 2 | Зарегистр. 23-11-2005 | Отправлено: 12:49 25-01-2006 | Исправлено: Cheery, 18:43 25-01-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
от WEBerFAK
Узнаём размер директории со всеми файлами и поддиректориями в ней
Для меня это когда-то была проблемма....

Код:
function gts ($dir)  
  {
      global $size;
       if (is_dir($dir)) {  
       if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
               if (($file!='.') && ($file!='..')) {
                     $f=$_SERVER['DOCUMENT_ROOT']."/$dir/$file";
                     if (filetype($f)=='dir') { gts ("$dir/$file/"); }
                     if (filetype($f)!='dir') { $size=$size+filesize($f); }
               }
         }
       closedir($dh);
    }
 }
}


Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:33 25-01-2006 | Исправлено: Cheery, 23:34 25-01-2006
Cheery



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

Код:
function myquery ($query)  
{  
$backtrace = debug_backtrace();  
 
$backtrace = "</b> in : <b>" . $backtrace[0]["file"] . "</b>, on line: <b>" . $backtrace[0]["line"] . "</b>";  
 
$result = mysql_query($query)  
or trigger_error(mysql_errno() . ": <b>" . mysql_error() . $backtrace . format_query($query) , E_USER_ERROR);  
 
return($result);  
}  
 
function format_query ($query)  
{  
return("<p><b>Query was:</b><br/><textarea cols='50' rows='10'>$query</textarea></p>");  
}

 
Любого достает оттачивать SQL запросы, писать в коде "or die", потом искать в чем же ошибка запроса. Данная функция призвана решить проблему вывода ошибки MySQL, для этого все запросы к БД должны делаться через нее, принимает в качестве параметра SQL запрос, возвращает результат, либо выдает подробный отчет об ошибке.

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:38 31-01-2006
Cheery



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

Цитата:
Написал свой первый класс для построения временной диаграммы/кривой (например для отображения статистики скачивания файла за последние дни).  
 
<?php  
class lz_graf {  
public $im;//Идентификатор изображения  
private $heigh;//Высота изображения  
private $width;//Ширина изображения  
private $punkt_x;//Выводить ли пунктирную горизонтальную линию?  
private $punkt_y;//Выводить ли пунктирную вертикальную линию?  
private $punkt_x_color;//Цвет пунктирной горизонтальной линии  
private $punkt_y_color;//Цвет пунктирной вертикальной линии  
private $razd_x_color;//Цвет оси х  
private $razd_y_color;//Цвет оси у  
private $razd_size;//Размер разделительной линии  
private $otstup_x;//Отступ от края изобр до графика по оси х  
private $otstup_y;//Отступ от края изобр до графика по оси у  
private $razd_x_text_size;//Размер текста разметки по оси х  
private $razd_y_text_size;//Размер текста разметки по оси у  
private $razd_x_text_color;//Цвет текста разметки по оси x  
private $razd_y_text_color;//Цвет текста разметки по оси у  
private $razd_x_text_otstup;//Отступ надписи от края графика по оси х  
private $razd_y_text_otstup;//Отступ надписи от края графика по оси у  
private $diagram_or_gr;//0 - вывод в виде диаграммы, 1-графика  
private $gr_color;//Цвет графика (ломаной кривой)  
private $y_name;//Массив элементов по ординате  
private $x_name;//Массив элементов по абциссе  
private $pryamoug_color;//Цвет прямоугольников (в виде диаграммы)  
private $pryamoug_gr;//Цвет границы прямоугольников (в виде диаграммы)  
private $bgc;//Цвет фона  
//Конструктор  
public function __construct($heigh=300, $width=502, $punkt_x=1, $punkt_y=1, $razd_size=3, $otstup_x=0.04,  
$otstup_y=0.09, $razd_x_text_size=3, $razd_y_text_size=3, $razd_x_text_otstup=0.2,  
$razd_y_text_otstup=1.015, $diagram_or_gr=0,  
$dannie=array('5','4','1','6','1','3','5','2','6','4','1','7', '5','6','4','2','3','6', '5','4','5','4','6','5','2', '3','6','4','1','5','7')) {  
$this->heigh=$heigh;  
$this->width=$width;  
$this->punkt_x=$punkt_x;  
$this->punkt_y=$punkt_y;  
$this->razd_size=$razd_size;  
$this->otstup_x=$otstup_x;  
$this->otstup_y=$otstup_y;  
$this->razd_x_text_size=$razd_x_text_size;  
$this->razd_y_text_size=$razd_y_text_size;  
$this->razd_x_text_otstup=$razd_x_text_otstup;  
$this->razd_y_text_otstup=$razd_y_text_otstup;  
$this->diagram_or_gr=$diagram_or_gr;  
$this->y_name=array('0', '1', '2','3', '4', '5', '6', '7', '8', '9', '10');  
$this->x_name=0;  
$this->dannie=$dannie;  
$this->im= ImageCreateTrueColor($this->width, $this->heigh);  
$this->razd_x_text_otstup=$razd_x_text_otstup;  
$this->razd_y_text_otstup=$razd_y_text_otstup;  
$this->diagram_or_gr=$diagram_or_gr;  
$this->dannie=$this->mashtab(); //Масштабирование данных  
}  
//Деструктор  
public function __destruct() {  
ImageDestroy($this->im);  
}  
 
//Масштабирование данных (для наглядности)  
/*Если есть элемент превышающий 10  
--уменьшаем все элементы на 10  
--увеличиваем разметку на 10*/  
private function mashtab (){  
$flag=0;  
while ($flag == 0){  
$flag=1;  
for ($i=0; $i<count($this->dannie); $i++){  
if ($this->dannie[$i] > 10) {  
$flag=0;  
}  
}  
if ($flag == 0) {  
for ($k=0; $k<count($this->dannie); $k++){  
settype($this->dannie[$k],'double');  
$this->dannie[$k]=$this->dannie[$k]/10;  
settype($this->dannie[$k],'string');  
}  
for ($k=0; $k<count($this->y_name); $k++){  
settype($this->y_name[$k],'integer');  
$this->y_name[$k]=$this->y_name[$k]*10;  
settype($this->y_name[$k],'string');  
}  
//Увеличиваем отступ, чтобы разметка не наезжала на ось  
$this->otstup_x=$this->otstup_x*1.25;  
}  
}  
unset($this->x_name);  
for ($k=0; $k<count($this->dannie); $k++){  
$this->x_name[$k]=$k+1;  
}  
return $this->dannie;  
}  
 
 
 
//Разметка оси у со штрихами  
private function sep_y_ () {  
$n=count($this->y_name);  
$x0=$this->width*$this->otstup_x;  
$y0=$this->heigh*$this->otstup_y;  
$x1=$this->width*$this->otstup_x;  
$y1=$this->heigh-$this->heigh*$this->otstup_y;  
$w=$this->width-($this->width*$this->otstup_x);  
$length=($y1-$y0)/($n-1);  
for ($i=0; $i<$n; $i++){  
ImageLine($this->im, $x0, $y0, $x0+$this->razd_size, $y0, $this->razd_x_color);  
ImageLine($this->im, $x0, $y0, $x0-$this->razd_size, $y0, $this->razd_x_color);  
$style=array($this->punkt_x_color,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT);  
imagesetstyle($this->im, $style);  
ImageLine($this->im, $x0, $y0, $w, $y0, IMG_COLOR_STYLED);  
$y0+=$length;  
}  
}  
 
//Разметка оси х без штрихов  
private function sep_y_lite_ () {  
$x0=$this->width*$this->otstup_x;  
$y0=$this->heigh*$this->otstup_y;  
$x1=$this->width*$this->otstup_x;  
$y1=$this->heigh-$this->heigh*$this->otstup_y;  
$n=count($this->y_name);  
$length=($y1-$y0)/($n-1);  
for ($i=0; $i<$n; $i++){  
ImageLine($this->im, $x0, $y0, $x0+$this->razd_size, $y0, $this->razd_x_color);  
ImageLine($this->im, $x0, $y0, $x0-$this->razd_size, $y0, $this->razd_x_color);  
$y0+=$length;  
}  
}  
 
//Разметка оси х со штрихами  
private function sep_x_ () {  
$x0=$this->width*$this->otstup_x;  
$y0=$this->heigh-$this->heigh*$this->otstup_y;  
$x1=$this->width-$this->width*$this->otstup_x;  
$y1=$this->heigh-$this->heigh*$this->otstup_y;  
$m=count($this->x_name);  
$h=$this->heigh*$this->otstup_y;  
$length=($x1-$x0)/$m;  
for ($i=0; $i<$m-1; $i++){  
$x0+=$length;  
ImageLine($this->im, $x0, $y0, $x0, $y0+$this->razd_size, $this->razd_y_color);  
ImageLine($this->im, $x0, $y0, $x0, $y0-$this->razd_size, $this->razd_y_color);  
$style=array($this->punkt_y_color,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT,IMG_COLOR_TRANSPARENT);  
imagesetstyle($this->im,$style);  
ImageLine($this->im, $x0, $h, $x0, $y0, IMG_COLOR_STYLED);  
}  
}  
 
 
//Разметка оси х без штрихов  
private function sep_x_lite_ () {  
$x0=$this->width*$this->otstup_x;  
$y0=$this->heigh-$this->heigh*$this->otstup_y;  
$x1=$this->width-$this->width*$this->otstup_x;  
$y1=$this->heigh-$this->heigh*$this->otstup_y;  
$m=count($this->x_name);  
$length=($x1-$x0)/$m;  
for ($i=0; $i<$m-1; $i++){  
$x0+=$length;  
ImageLine($this->im, $x0, $y0, $x0, $y0+$this->razd_size, $this->razd_y_color);  
ImageLine($this->im, $x0, $y0, $x0, $y0-$this->razd_size, $this->razd_y_color);  
}  
}  
 
//Вывод надписей разметки оси ординат  
private function sep_y_text_ (){  
$x0=$this->width*$this->otstup_x;  
$y0=$this->heigh*$this->otstup_y;  
$x1=$this->width*$this->otstup_x;  
$y1=$this->heigh-$this->heigh*$this->otstup_y;  
$n=$this->y_name;  
$length=($y1-$y0)/(count($n)-1);  
$n=array_reverse($n);  
$y0-=$length;  
for ($i=0; $i<count($n); $i++){  
$y0+=$length;  
ImageString($this->im, $this->razd_x_text_size, $x0*$this->razd_x_text_otstup, $y0-5, $n[$i], $this->razd_x_text_color);  
}  
}  
 
//Вывод надписей разметки оси х  
private function sep_x_text_ (){  
$x0=$this->width*$this->otstup_x;  
$y0=$this->heigh-$this->heigh*$this->otstup_y;  
$x1=$this->width-$this->width*$this->otstup_x;  
$y1=$this->heigh-$this->heigh*$this->otstup_y;  
$m=$this->x_name;  
$length=(($x1-$x0)/count($m));  
$flag=1;  
for ($i=0; $i<count($m); $i++){  
$x0+=$length;  
if ($flag==1){  
$flag=-1;  
ImageString($this->im, $this->razd_y_text_size, $x0-13, $y0*$this->razd_y_text_otstup, $m[$i], $this->razd_y_text_color);  
} else $flag=1;  
}  
}  
 
//Вычисление положения точки  
private function dlina ($m, $length,$y0){  
$p=(round($m)*$length)+(($m-round($m))*$length);  
$p=$y0-$p;  
 
return $p;  
}  
 
//Построение прямоугольников (для диаграммы)  
private function pryamoug () {  
$x0=$this->width*$this->otstup_x;  
$y0=$this->heigh-$this->heigh*$this->otstup_y;  
$x1=$this->width-$this->width*$this->otstup_x;  
$y1=$this->heigh*$this->otstup_y;  
$m=$this->dannie;  
$n=$this->x_name;  
$length=(($x1-$x0)/(count($n)));  
$length_y=(($y0-$y1)/(count($this->y_name)-1));  
$x0+=$length;  
imagesetthickness($this->im,1);  
for ($i=0; $i<count($m); $i++){  
imagefilledrectangle($this->im,$x0,$y0,$x0-$length,$this->dlina($m[$i], $length_y, $y0),$this->pryamoug_color);  
imagerectangle($this->im,$x0,$y0,$x0-$length,$this->dlina($m[$i], $length_y, $y0),$this->pryamoug_gr);  
$x0+=$length;  
}  
}  
 
//Построение графика  
private function line (){  
$x0=$this->width*$this->otstup_x;  
$y0=$this->heigh-$this->heigh*$this->otstup_y;  
$x1=$this->width-$this->width*$this->otstup_x;  
$y1=$this->heigh*$this->otstup_y;  
$m=$this->dannie;  
$length=(($x1-$x0)/(count($this->x_name)));  
$yy0=$y0;  
$style=array($this->gr_color);  
imagesetstyle($this->im,$style);  
$length_y=(($y0-$y1)/(count($this->y_name)-1));  
$flag=1;  
for ($i=0; $i<count($m); $i++){  
if ($flag==0){  
imageline($this->im,$x0,$yy0,$x0+$length,$this->dlina($m[$i], $length_y, $y0),IMG_COLOR_STYLED); }  
else {$flag=0;}  
$yy0=$this->dlina($m[$i], $length_y, $y0);  
$x0+=$length;  
}  
}  
 
//Устанавливаем цвета  
public function set_color ($punkt_x_color, $punkt_y_color, $razd_x_color, $razd_y_color, $razd_x_text_color, $razd_y_text_color, $gr_color, $pryamoug_color, $pryamoug_gr, $bgc){  
$this->punkt_x_color=$punkt_x_color;  
$this->punkt_y_color=$punkt_y_color;  
$this->razd_x_color=$razd_x_color;  
$this->razd_y_color=$razd_y_color;  
$this->razd_x_text_color=$razd_x_text_color;  
$this->razd_y_text_color=$razd_y_text_color;  
$this->gr_color=$gr_color;  
$this->pryamoug_color=$pryamoug_color;  
$this->pryamoug_gr=$pryamoug_gr;  
$this->bgc=$bgc;  
}  
 
//Отображение графика  
public function show (){  
ImageFill($this->im, 0, 0, $this->bgc);  
imagesetthickness($this->im,2) ;  
ImageLine($this->im, $this->width*$this->otstup_x, $this->heigh-$this->heigh*$this->otstup_y, $this->width-$this->width*$this->otstup_x, $this->heigh-$this->heigh*$this->otstup_y, $this->razd_x_color);  
$otstup_xx=$this->otstup_x;  
if ($this->diagram_or_gr==0){  
$this->pryamoug ();  
} else {  
$this->line();  
}  
ImageLine($this->im, $this->width*$this->otstup_x, $this->heigh*$this->otstup_y, $this->width*$this->otstup_x, $this->heigh-$this->heigh*$this->otstup_y, $this->razd_y_color);  
if ($this->punkt_x==1) {  
$this->sep_y_();  
} else {  
$this->sep_y_lite_();  
}  
if ($this->punkt_y==1){  
$this->sep_x_();  
} else {  
$this->sep_x_lite_();  
}  
$this->sep_y_text_();  
$this->sep_x_text_();  
Header ('Content-type: image/png');  
ImagePng ($this->im);  
}  
}  
?>  
 
 
<?php  
//Пример использования класса lz_graf  
require_once('lz_graf.php');  
$dannie=array('50','34','89','77','27','20','60','43','53','88','11','12','25','45');  
$a=new lz_graf(300, 502, 1, 1, 3, 0.04, 0.09, 3, 3, 0.2,1.015, 0,$dannie);  
/*  
Параметры:  
300 - высота изображения  
502 - ширина изображения  
1 - выводить ли пунктирные линии по оси x (1-да, 0-нет)  
1 - выводить ли пунктирные линии по оси x (1-да, 0-нет)  
3 - Размер разделительной линии  
0.04 - Отступ от края изобр до графика по оси х  
0.09 - Отступ от края изобр до графика по оси y  
3 - Размер текста разметки по оси х  
3 - Размер текста разметки по оси y  
0.2 - Отступ надписи от края графика по оси х  
1.015 - Отступ надписи от края графика по оси y  
0 - вывод в виде диаграммы или графика (ломанной кривой) (0-диаграмма, 1-кривая)  
$dannie - массив данных для построения  
*/  
$white=ImageColorAllocate ($a->im, 255, 255, 255);  
$blue=ImageColorAllocate ($a->im, 0, 0, 64);  
$red=ImageColorAllocate ($a->im, 250, 43, 5);  
$blue1=ImageColorAllocate ($a->im, 0, 64, 128);  
$a->set_color($white,$white,$white,$white,$white,$white,$white,$blue1,$white, $blue);  
$a->show();  
?>  
 


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:29 14-05-2006
vworld



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Склонение существительных с числительными  
 
В русском языке существительные с числительными могут быть в единственном, двойственном и множественном числе: один арбуз, два арбуза, пять арбузов (двойственное число — это почти исчезнувшая в русском языке грамматическая конструкция, встречающаяся только в этом случае).  
<?  
function pluralForm($n, $form1, $form2, $form5)  
{  
$n = abs($n) % 100;  
$n1 = $n % 10;  
if ($n > 10 && $n < 20) return $form5;  
if ($n1 > 1 && $n1 < 5) return $form2;  
if ($n1 == 1) return $form1;  
return $form5;  
}  
 
// пример использования  
echo "В Вашем почтовом ящике $n ".pluralForm($n, "письмо", "письма", "писем");  
?>

Всего записей: 2617 | Зарегистр. 13-02-2003 | Отправлено: 07:32 20-10-2006
LusAvedus

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Фильтр чисел. Думаю может в качестве дебюта пойдет.
 

Код:
 
function input_check_numeric($input,$default_value=0) {
   ereg("([0-9]+[0-9]|[0-9]|(\-)[0-9]|(\-)[0-9]+[0-9])",$input,$match);
   return ((!$match) ? $default_value : $match[0]);
   }
 

 
Сильно не пинать регулярные выражения только начал изучать.




И к чему это было приведено?
Вернее - что оно делает? /Cheery/

Всего записей: 2 | Зарегистр. 30-10-2006 | Отправлено: 06:07 30-10-2006 | Исправлено: Cheery, 07:17 30-10-2006
zerkms

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
LusAvedus
дебют не удался - php.net/is_numeric
 
ps: 2.5 это уже не число?
pps: [0-9]+[0-9] эквивалентно [0-9]{2,}
ppps: (-)? чтобы не дублировать по 10 раз

----------
tvfёdor - оперативно уведомляет о раздачах rutracker | Блог об иммиграции в Новую Зеландию

Всего записей: 387 | Зарегистр. 07-05-2004 | Отправлено: 12:53 30-10-2006 | Исправлено: zerkms, 12:57 30-10-2006
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подсветка PHP синтаксиса на основе шаблонов. Т.е. можно не только html тегами подсветить, но и IB кодами, спец символами для mirc итд. Только для PHP >5 !!! Если что - просьба сильно не пинать. Если кому будет интересно, то могу доробатать его(к примеру можно что-нибудь вроде не сложного анализатора кода сделать или добавить ссылки на пхпшные функции)
Подробнее...

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 18:43 20-11-2006
hire

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dump данных:
 
Функция dump (кол-во аргументов - любое):

Код:
 
    /**
     * Function for dump variables
     *  
     * @access public
     * @global $_DEBUG
     */
     function dump()
     {
        require_once 'dBug.class.php';
         
         $id = rand();
         
         $init = debug_backtrace();    
         
         $msg = "";
         $lvl = count($init);
         if ($lvl >= 1) {
//             $msg .= "&nbsp;&nbsp;was called from :<BR>";
             for ($k = $lvl-1; $k >= 0; $k--) {
                 $msg .= "&nbsp;[#".$k."] ";
                 
                 if (isset($init[$k]["class"]))
                     $msg .= @$init[$k]["class"]."::";
                     
                 if (isset($init[$k]["function"]))
                     $msg .= @$init[$k]["function"]."() called at ";
                     
                 $msg .= "[/".basename(@$init[$k]["file"]).":".@$init[$k]["line"]."]<BR>";
             }
             
         }
 
         global $_DEBUG;
         
         if (!$_DEBUG) {
             $_DEBUG = 1;
            echo     
                    "<script language='JavaScript'>\n".
                    " show_item=function(evt) { var obj=document.getElementById(evt); if(obj.className == \"\") { obj.className += \" over\"; }else{ obj.className = \"\"; } }\n".
                    "</script>\n";
            echo     "<style>\n";
            echo         "#debug {background-color:#ffffff; margin: 0;}    ".
                         "#debug ul {list-style-type: none; padding: 0 2 0 2; margin: 0;}    ".
                        "#debug li a{text-decoration: none; color: #003366; margin: 0; font-size: 12px;}".
                        "#debug li a:HOVER{color: #FF3300;}".
                        "#debug li ul{ display: none; padding: 2 2 2 2;}".
                        "#debug li ul li {background-color:#ddffdd; padding: 2 2 2 2; margin: 2;}".
                        "#debug li.over ul{display: block;}".
                        "#debug li.over a{color: #000000;;}";                
            echo     "</style>\n";
            
            echo    "<script language='JavaScript'>
                /* code modified from ColdFusion's cfdump code */
                    function dBug_toggleRow(source) {
                        target=(document.all) ? source.parentElement.cells[1] : source.parentNode.lastChild
                        dBug_toggleTarget(target,dBug_toggleSource(source));
                    }
                    
                    function dBug_toggleSource(source) {
                        if (source.style.fontStyle=='italic') {
                            source.style.fontStyle='normal';
                            source.title='click to collapse';
                            return 'open';
                        } else {
                            source.style.fontStyle='italic';
                            source.title='click to expand';
                            return 'closed';
                        }
                    }
                
                    function dBug_toggleTarget(target,switchToState) {
                        target.style.display=(switchToState=='open') ? '' : 'none';
                    }
                
                    function dBug_toggleTable(source) {
                        var switchToState=dBug_toggleSource(source);
                        if(document.all) {
                            var table=source.parentElement.parentElement;
                            for(var i=1;i<table.rows.length;i++) {
                                target=table.rows[i];
                                dBug_toggleTarget(target,switchToState);
                            }
                        }
                        else {
                            var table=source.parentNode.parentNode;
                            for (var i=1;i<table.childNodes.length;i++) {
                                target=table.childNodes[i];
                                if(target.style) {
                                    dBug_toggleTarget(target,switchToState);
                                }
                            }
                        }
                    }
                </script>
                
                <style type='text/css'>
                    table.dBug_array,table.dBug_object,table.dBug_resource,table.dBug_resourceC,table.dBug_xml {
                        font-family:Verdana, Arial, Helvetica, sans-serif; color:#000000; font-size:12px;
                    }
                    
                    .dBug_arrayHeader,
                    .dBug_objectHeader,
                    .dBug_resourceHeader,
                    .dBug_resourceCHeader,
                    .dBug_xmlHeader  
                        { font-weight:bold; color:#FFFFFF; }
                    
                    /* array */
                    table.dBug_array { background-color:#006600; }
                    table.dBug_array td { background-color:#FFFFFF; }
                    table.dBug_array td.dBug_arrayHeader { background-color:#009900; }
                    table.dBug_array td.dBug_arrayKey { background-color:#CCFFCC; }
                    
                    /* object */
                    table.dBug_object { background-color:#0000CC; }
                    table.dBug_object td { background-color:#FFFFFF; }
                    table.dBug_object td.dBug_objectHeader { background-color:#4444CC; }
                    table.dBug_object td.dBug_objectKey { background-color:#CCDDFF; }
                    
                    /* resource */
                    table.dBug_resourceC { background-color:#884488; }
                    table.dBug_resourceC td { background-color:#FFFFFF; }
                    table.dBug_resourceC td.dBug_resourceCHeader { background-color:#AA66AA; }
                    table.dBug_resourceC td.dBug_resourceCKey { background-color:#FFDDFF; }
                    
                    /* resource */
                    table.dBug_resource { background-color:#884488; }
                    table.dBug_resource td { background-color:#FFFFFF; }
                    table.dBug_resource td.dBug_resourceHeader { background-color:#AA66AA; }
                    table.dBug_resource td.dBug_resourceKey { background-color:#FFDDFF; }
                    
                    /* xml */
                    table.dBug_xml { background-color:#888888; }
                    table.dBug_xml td { background-color:#FFFFFF; }
                    table.dBug_xml td.dBug_xmlHeader { background-color:#AAAAAA; }
                    table.dBug_xml td.dBug_xmlKey { background-color:#DDDDDD; }
                </style>";
         }  
         
         echo    "<div id=debug>
                     <ul>
                         <li id=\"".$id."\"><a name=\"".$id."\"></a><a onClick=\"javascript: show_item(".$id.");\" href=\"#".$id."\">".
                        "<b>Dump was called: </b><br>".            
                        $msg.
                        "<b>Variables:<br></b></a>".
                    "<ul>\n";
                    
        foreach (func_get_args() as $var)
        {
            echo "<li>";
            
//            if (is_string($var)) echo "string (".strlen($var)."): ";
            new dBug($var);
            
            echo "</li>\n";
        }
        echo    "</ul></li></ul></div><HR>";
     }
 

 
Использование:

Код:
 
dump($_GET, $classRequest);
 

 
 
Класс dBug (author Kwaku Otchere; modified)
Читать дальше..

Всего записей: 20 | Зарегистр. 21-08-2006 | Отправлено: 09:58 25-11-2006 | Исправлено: hire, 10:11 25-11-2006
dacuan

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
hire
Много буков
 
Исправленный класс dBug
 
Использование:

Код:
 
<?php
require_once("dBug.php");
 
$a = "123";
$b = "456";
 
// Просто вывод
dBug::dump($a, $b);
 
// Вывод и прекращение работы скрипта
dBug::stop($a, $b);
 
?>
 

 
Число аргументов также не ограничено.

Всего записей: 545 | Зарегистр. 23-10-2003 | Отправлено: 10:43 25-11-2006
andymc

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ГЕНЕРАТОР ПАРОЛЕЙ
$length - длина пароля
$dig    - использовать ли цифры (по умолчанию - да)
$lchar  - использовать ли латинские буквы (по умолчанию - да)
$rchar  - использовать ли русские буквы
$symb   - использовать ли дополнительные символы и какие
 

Код:
 
function generate_password($length,$dig=1,$lchar=1,$rchar=0,$symb=''){
    $dig=array(0,1,2,3,4,5,6,7,8,9);
    $rus=array(
    "а","б","в","г","д","е","ж","з","и","к",
    "л","м","н","о","п","р","с","т","у","ф",
    "х","ц","ч","ш","щ","ь","ы","ъ","э","ю",
    "я","ё","й");
    $for=array(
    "a","b","c","d","e","f","g","h","j","k",
    "l","m","n","o","p","q","r","s","t","u",
    "v","w","x","y","z");
    $main=array();
    $dig?$main=array_merge($main,$dig):true;
    $rchar?$main=array_merge($main,$rus):true;
    $lchar?$main=array_merge($main,$for):true;
    !empty($symb)?$main=array_merge($main,explode(' ',$symb)):true;
    shuffle($main);
    return $pass=substr(implode('',$main),0,$length);
}
 

Оптимизитор кода

Код:
 
function optimize_html($s){
    $s=str_replace("\n"," ",$s);
    $s=str_replace("\r"," ",$s);    
    //$s=str_replace("href=\"http://".$_SERVER['HTTP_HOST']."/","/",$s);
    while(strchr($s,"  ")){
        $s=str_replace("  "," ",$s);
    }
    while(strchr($s,"    ")){
        $s=str_replace("    "," ",$s);
    }    
    while(strchr($s,"  ")){
        $s=str_replace("  "," ",$s);
    }    
    return $s;
}
 

 
Функция записи строки в новый файл

Код:
 
function fw_($file,$str){
    $fo=fopen($file,'w+') or die("Не удалось открыть файл");
    if(fwrite($fo,$str)){
        fclose($fo);
        return true;
    }else{
        fclose($fo);
        return false;
    };
}
 

 
Функция дозаписи строки в существующий файл

Код:
 
function fa_($file,$str){
    $fo=fopen($file,'a+') or die("Не удалось открыть файл");
    if(fwrite($fo,$str)){
        fclose($fo);
        return true;
    }else{
        fclose($fo);
        return false;
    };    
}
 

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 23:41 09-12-2006 | Исправлено: andymc, 09:08 10-12-2006
LusAvedus

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

Цитата:
LusAvedus
дебют не удался - php.net/is_numeric
 
ps: 2.5 это уже не число?
pps: [0-9]+[0-9] эквивалентно [0-9]{2,}
ppps: (-)? чтобы не дублировать по 10 раз

 
1. is_numeric определяет число или не число. А этот код вырезает число из строки если оно есть.
2. Забыл написать что это все только для целых чисел.
3. За подсказки спасибо,  учу матчасть по регулярным выражениям.

Всего записей: 2 | Зарегистр. 30-10-2006 | Отправлено: 16:03 10-12-2006
andymc

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
LusAvedus
Чтобы "вырезать число из строки", попробуй eregi_replace("[0-9]*",$input).
Хотя не советую увлекаться регулярами, они выполняются адско медленно
 
 
Добавлено:
Время выполнения скрипта
(другой вариант)
Есть функции (смысл их не важен)

Код:
 
function startTimer(){
    global $starttime;
    $starttime = microtime();
    return $starttime;
}
function endTimer(){
    global $starttime;
    $pageendtime = microtime();
    $starttime2 = explode(" ",$starttime);
    $endtime = explode(" ",$pageendtime);
    $totaltime = $endtime[0]-$starttime2[0]+$endtime[1]-$starttime2[1];
    $totaltime = round($totaltime, 3);
    return $totaltime;
}
 

Начиннаем контроль времени так:

Код:
 
$start_time=startTimer();
$timer=array();
$timer['start']=endTimer();
 

А далее в самых разных точках кода ставим вызов массива $timer['параметр']=endTimer();

Код:
 
$timer['modules']=endTimer();
...
$timer['content']=endTimer();
 

Результат получаем пропечатав массив $timer

Код:
 
echo "<pre style='font-size:10px'>";
print_r($timer);
echo "</pre>";
 

 
Добавлено:
Папка, в которой находится скрипт
полезно для определение папки, в которую установлена программа, при установке

Код:
 
$root_base=str_replace('/'.basename($_SERVER['PHP_SELF']),'',$_SERVER['PHP_SELF']);
$root_dir=str_replace('/','',$root_base);
// $root_dir - требуемая папка
 

 
Выявление робота, зашедшего на сайт (не оптимально, но очевидно)

Код:
 
$is_robot=(strchr($_SERVER['HTTP_USER_AGENT'],'StackRambler') || stristr($_SERVER['HTTP_USER_AGENT'],'Yandex') || strchr($_SERVER['HTTP_USER_AGENT'],'Googlebot') || strchr($_SERVER['HTTP_USER_AGENT'],'Yahoo! Slurp')|| strchr($_SERVER['HTTP_USER_AGENT'],'Mail.ru'));
 


Динамические стили
Есть файл стилей, где используются PHP коды. Определение переменных соответственно в другом месте

Код:
 
....
a:link,  a{text-decoration: none; color: <?php echo $linkColor ?>;}
....
 

Подключаем файл в заголовок

Код:
 
<html><head><style><?php include($dir_images.'/style2.css');?></style>...
 

Дополнительно можно оптимизировать файл стилей, убрать отбивки и пробелы
 
Добавлено:

Создание фактического текущего УРЛ
$_SERVER['HTTP_HOST']=str_replace("www.","",$_SERVER['HTTP_HOST']);
if ($QUERY_STRING!=''){
   $current_url="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']."?".$QUERY_STRING;
} else {
   $current_url="http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
}
 

Извлечение сайта из ссылки
function extract_site($url){
    $part=substr($url,8);
    $end=strchr($part,"/");
    $site=str_replace($end,'',$url)."/";    
    $site=str_replace('www.','',$site);    
    return $site;        
}
 

извлекает из строки подстроку от подстроки $s до подстроки $e
function extract_str($str,$s,$e){
    if (!strchr($str,$s)) return $str;
    $start=strpos($str,$s);
    $end=strpos($str,$e,$start);
    return substr($str,$start,$end-$start);
}
 

Значение параметра строки запроса
// $string - строка запроса (предположительно $QUERY_STRING)
// $name - параметр
function get_query_value($string,$name){
    if (strchr($string,"$name=")){
        $string=substr(strchr($string,"$name="),1+strlen($name));
        if (strchr($string,'&')){
            $string=str_replace(strchr($string,'&'),'',$string);    
        }
        return $string;        
    } else {
        return false;        
    }
}

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 19:45 10-12-2006 | Исправлено: andymc, 21:38 10-12-2006
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
andymc
давайте будем писать то, что понимаем?

Цитата:
if ($QUERY_STRING!=''){

не будет установлена при register_globals=off.. при этом в куске используется $_SERVER

Цитата:
Извлечение сайта из ссылки

www.php.net/parse_url

Цитата:
Значение параметра строки запроса

www.php.net/parse_url  + www.php.net/parse_str
 
 
ps: мое высказывание не предполагает его обсуждение в этом топике.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 07:07 12-12-2006
chs52ncm

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Функция скачивающая файл по HTTP на PHP. Срочно. Помогите кто может.
 
 
 
 





У тебя действительно серого вещества не хватает? Прочитай шапку темы. Тут не задают вопросы /Cheery/

Всего записей: 4 | Зарегистр. 01-09-2006 | Отправлено: 14:45 15-12-2006 | Исправлено: Cheery, 15:22 15-12-2006
andymc

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Разборщик стилей (я так назвал)
Утром сегодня написал код, который разбирает текст стилей либо из файла .css либо встроенных. Надо указать только файл.
Стили помещаются в массив $styles в виде
$a['имя стиля']['параметр']=значение

Код:
 
//$s=file_get_contents('style.css');
$s=file_get_contents("index.htm");
$styles=array();
if (strchr($s,'<style>')){
    $start=strpos($s,'<style>')+7;
    $end=strpos($s,'</style>');
    $s=substr($s,$start,$end-$start);
}
$start=0;
if (substr_count($s,'{')>0&&substr_count($s,'}')>0){    
    while (strchr($s,'{')){
         
        $st0=strpos($s,'{');
        $st1=strpos($s,'}');
        $style_name=trim(substr($s,$start,$st0));
        $style_body=trim(substr($s,$st0+1,$st1-$st0-1));
        $styles[$style_name]=array();        
         
        while (strchr($style_body,':')){            
            $dv=strpos($style_body,':');
            $tz=strpos($style_body,';');
            $name=trim(substr($style_body,0,$dv));
            $value=trim(substr($style_body,$dv+1,$tz-$dv-1));
            $style_body=substr($style_body,$tz+1);
            $styles[$style_name][$name]=$value;
        }
         
        $s=substr($s,$st1+1);
    }
}
print_br($styles);
 

// хочу ещё написать разборщик html  
// разбор стилей мне нужен был, чтобы иметь к ним доступ из PHP (дизайн шаблона)

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 13:25 18-12-2006 | Исправлено: andymc, 13:26 18-12-2006
drew2006

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
перевод текста с русского на английский через translate.ru
используется для получения ЧПУ из русского названия страницы.
 
function translate ($src) {
 
    $ch = curl_init();
 
    curl_setopt($ch, CURLOPT_URL, 'http://www.translate.ru/text.asp');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, 'status=translate&direction=re&transliterate=ON&source='.urlencode($src));
 
    $html = curl_exec($ch);
    curl_close($ch);
 
    preg_match('|<span id="r_text" name="r_text">(.*?)</span>|s', $html, $rst);
    $rst = strtolower(preg_replace('|[\s]+|', '_', trim($rst[1])));
 
    return $rst;
 
}

Всего записей: 12 | Зарегистр. 28-01-2006 | Отправлено: 21:38 28-12-2006 | Исправлено: drew2006, 21:39 28-12-2006
mctaddy



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




Я могу только предложить банан за несоблюдение правил. Проблемы со зрением? /Cheery/
ps: PHP распространяется бесплатно

Всего записей: 28 | Зарегистр. 20-04-2006 | Отправлено: 00:03 18-01-2007 | Исправлено: Cheery, 00:04 18-01-2007
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Существует ли функция, которая возвращает часть строки после символа "?" в строке адреса (т.е. всю строку параметров)?
 
Извините, не туда задал




Не извиню.. шапку читать надо ! /Cheery/

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 19:51 21-01-2007 | Исправлено: Cheery, 21:22 21-01-2007
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
$GLOBALS['HTTP_RAW_GET_DATA'] - должно заработать по аналогии с $GLOBALS['HTTP_RAW_POST_DATA'], хотя насколько я помню, документации по этим переменным я ни разу нигде не встречал что-то наподобие недокументированных констант... хотя на самом деле, по-моему, какой-то из header-переменных это содержит.. попробуй заодно посмотреть print_r($_SERVER)

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 21:20 21-01-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
G_Drey_V
бр.. первым делом надо смотреть phpinfo();
 
$_SERVER["QUERY_STRING"]
 
 
 
ps: чувствую, что пора банить тех, кто постит тут не по делу

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:24 21-01-2007
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может кому-то понадобится. Вывод даты нормальным русским языком:

Код:
function rusdate($d)  
{  
  $montharr = array("января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря");
  $i =  date("m",$d) - 1;
  return date("j",$d)." $montharr[$i] ".date("Y",$d);
}

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 16:57 09-02-2007
antyan



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

Код:
 
function cutstr($linkstrip,$strip) {
$linkstrip=stripslashes($linkstrip);
if (strlen($linkstrip) > $strip) $linkstrip="".substr($linkstrip,0,$strip)."...";
return $linkstrip;
}
 
// Колличество символов
$strip = 25;
 
// Содержимое
$text = "Здравствуйте. Я делаю журнал посещений для домашнего сайта.";
 
// Обрабатываем текст
$linkstrip = cutstr($text, $strip);
 
// Вывод
echo "$linkstrip";
 





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

Всего записей: 24 | Зарегистр. 08-09-2006 | Отправлено: 03:55 26-02-2007 | Исправлено: Cheery, 04:06 26-02-2007
andymc

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подключаем все файлы php из папки $dir
Код:
function include_dirfiles($dir){
    if(!file_exists($dir) || !is_dir($dir)) {
        return false;
    }
    $d=opendir($dir);
    $array = array();
    while($file = readdir($d)) {
        $filepath = $dir . "/" . $file;        
        if ($file == "." || $file == ".." || is_dir($filepath) || !strrchr($file, '.php')) continue;
        include_once($filepath);
    }
}
include_dirfiles('lib');

Оптимизация html
Код:
function callback ($buffer) {    
    $patterns = array (
    "/<!--.{0,}-->/", "/<!--.{0,}-->/", "/ {2,}/",  
    "/\t{1,}/", "/\r\n/", "/^\s{1,}/m");
    $replaces = array ( "", "", " ", " ", "\n", "");    
    return( preg_replace ($patterns, $replaces, $buffer ) );
}
ob_start("callback");
а ещё я сделал вот это http://fan.h17.ru/metric/mod.timeline.php

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 05:40 26-02-2007
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
У меня есть конструктивное предложение! Я уже давно читаю все, что здесь пишут... предлагаю все-таки обсуждать публикуемый код и вносить в него конструктивные изменения, если необходимо. И предлагать более удобные, по возможности стандартные решения тех или иных проблем... ну это так, к слову...
 
SafeWay, я что-то не совсем понял для чего нужна эта функция??? какие она действия осуществляет??? проще просто установить необходимые флаги отображения ошибок.
потом вот это:

Цитата:
 
@error_reporting($error_flags);
@ini_set ('error_reporting', $error_flags);
$old_error_handler = set_error_handler("err_handler");  
 

не будет работать - в большинстве случаев вызов этих функций не приводит ни к каким результатам (доказано опытом на различных серверах, как российских, так и зарубежных). Чтобы установить флаги ошибок необходимо использовать .htaccess
 
antyan, как-то странно режет текст функция, прям по словам. По-моему следует первым шагом определить ближайший пробел к "месту разреза" и уже обрезать по нему.
А вообще, имхо, это не очень хорошо использовать такие функции. Т.к. при это, насколько я понимаю смысл функции, происходит объединение кода с версткой, что очень плохо. Лучше использовать шаблоны и модули для их обработки... так вот в этих модулях уже есть такие функции, причем с флагами. Например, обрезка под пробел, дополнение какими-либо символами (не обязательно "...", но и "далее..." и др.)

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 09:51 26-02-2007
Oleg_de



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

Цитата:
а ещё я сделал вот это http://fan.h17.ru/metric/mod.timeline.php

http://fan.h17.ru/metric/mod.timeline.php?image=text:Любимцу;time:-1982534339;line:line_typeb1_s.gif;begun:d_typeb2.gif;color:000000
 
что-то не совсем правильно

----------
Германия глазами переселенцев и мигрантов ...

Всего записей: 336 | Зарегистр. 03-09-2001 | Отправлено: 14:41 07-03-2007
Radface

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





читаем внимательно правила форума.. /Cheery/

Всего записей: 1 | Зарегистр. 09-03-2007 | Отправлено: 18:54 09-03-2007 | Исправлено: Cheery, 20:25 10-03-2007
ZaIbalo

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Видел во многих скриптах: для разбивки урла используют регулярку.

Имхо http://php.net/parse_url

 
Пример полезного скрипта:

 

Код:
 
// Хост поисковой системмы
$host = 'www.google.com';
// Если доступен реферер
if (isset($_SERVER['HTTP_REFERER']))
{
    // Разбеваем http://php.net/parse_url
    $url = parse_url($_SERVER['HTTP_REFERER']);
    // Если хост реферера совподает с $host
    if ($url['host'] === $host2)
    {
        // Разбеваем GET запрос реферера
        // http://php.net/parse_str
        parse_str($url['query'], $query);
        // Выводим результат
        echo 'Ты искал <b>'.$query['q'].'</b> нас через '.$host;
    }
}
 





cоветую сменить ник - этот будет заблокирован /Cheery/

Всего записей: 3 | Зарегистр. 19-03-2007 | Отправлено: 15:17 19-03-2007 | Исправлено: Cheery, 18:38 19-03-2007
Cheery



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

Цитата:
Видел во многих скриптах: для разбивки урла используют регулярку.

не приучайте к плохим вещам.. через регулярку это делается одной строкой вместе с проверкой реферера..

Цитата:
Разбеваем  

да и выучите русский.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:52 20-03-2007
fregat18

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





Окулист знает - к нему обращаемся за очками /Cheery/

Всего записей: 1 | Зарегистр. 21-03-2007 | Отправлено: 14:05 21-03-2007 | Исправлено: Cheery, 18:36 21-03-2007
G_Drey_V

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




ну, и кто из вас умнее? /Cheery/

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 20:30 21-03-2007 | Исправлено: Cheery, 20:56 21-03-2007
andymc

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Очень простые и полезные функции

Код:
 
function GET($name, $num = 0) {
    if (isset($_GET[$name])) {
        return urldecode($_GET[$name]);
    } else {
        return '';
    }
}
function POST($name) {
    if (isset($_POST[$name])) {
        return $_POST[$name];
    } else {
      return '';
    }
}
 

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 20:55 21-03-2007
Cheery



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

Цитата:
Очень простые и полезные функции  

плиз. не захламляйте топик примитивными вещами. нужны оригинальные и интересные решения.
вы же вытащили откуда то.. учитывая ненужное
Цитата:
$num = 0

и к тому же все пишется еще проще  


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:59 21-03-2007
nu_nah



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
РЕБЯТ, нужна помощь... помогите мне придумать тему к дипломному проекту....




окулист тебе поможет /Cheery/

Всего записей: 14 | Зарегистр. 18-10-2006 | Отправлено: 22:21 22-03-2007 | Исправлено: Cheery, 22:24 22-03-2007
danil74



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Всем привет. Мне понравилась эта ветка и я тоже решил поделиться свом творчеством. Иногда для ускорения разработки скриптов я использую вспомогательные скрипты. Думаю, не я один страдаю этим недостатком. Парочкой таких скриптов я и хочу поделиться.
Помню я какое-то время долго и упорно искал в литературе и инете полное описание суперглобальных массивов($_REQUEST, $_SERVER и т.д.), но так ничего толкового не нашёл. И тут мне пришла в голову идея написать скрипт, который будет выволить значения ключей всех уровней и значений исследуемого массива. В результае получилось вот это(привожу на примере суперглобального массива $_SERVER)

Код:
 
<html>
 
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Изучам массивы</title>
</head>
 
<body>
 
<?php
 
function view($var1, $var2){//Создаю рекурсивную функцию для отображения всех ключей и всех значений массива
     
foreach ($var1 as $name => $value) {if(gettype($value)=="array") view($var1[$name], "$var2 [$name]");
else echo "<b>\$$var2 [$name]</b> = $value<br>\n";
 
}    
};
 
///////////////////////////////////////////////////////////////////////////
$var_name="_SERVER";//Сюда нужно вписать имя переменной без знака $ вначале
///////////////////////////////////////////////////////////////////////////
view($$var_name, $var_name);//А теперь запускаю вывод ключей и значений массива
 
?>
</body>
 
</html>
 

Попробуйте, например, написать

Код:
$a=array("a" => array("121", array("121", "243", "45"), "45"),
"b" => "dg",
"c" => "hfgh"
);
$var_name="a";

Для того, чтобы увидеть, что делают другие суперглобальные массивы $_COOKIE, $_ENV, $_FILES, $_GET, $_POST, $_REQUEST, $_SESSION нужно подготовиться. Нопример, чтобы появились $_COOKIE нужно в самом начале файла до любого хтмля написать что-нибудь вроде
Код:
setcookie("cookie_name", "cookie_value", time()+3600);

Чтобы появились $_FILES необходимо послать форму
Код:
<form method="POST" enctype="multipart/form-data" action="--WEBBOT-SELF--">
    <p><input type="file" name="FILE1" size="20"><input type="submit" value="Отправить"></p>
</form>

С помощью этого массива так удобно закачивать файлы на сервер. Например хотим закачивать картинки в папку images

Код:
<?php $dir=opendir("./images/");
chdir("./images/"); //Перешли к папке images
if(isset($location)){//Загружаем картинку на сервер
if($_FILES['location']['type']==="image/pjpeg"||$_FILES['location']['type']==="image/gif"||$_FILES['location']['type']==="image/x-png")copy( $_FILES['location']['tmp_name'], basename($_FILES['location']['name']));
else echo "Не обнаружены файлы с поддерживаемыми изображениями<br>";
}?>
<form method="POST" enctype="multipart/form-data" action="">
    <p><input type="file" name="location" size="20"><input type="submit" value="Отправить"></p>
</form>

Остальные суперглобальные массивы я думаю вы теперь и сами изучете
Скрипт для показа ключей и значений очень удобен для узнавания что вернула функция mysql_fetch_array и тому подобным целям.
*******************************************************
Второй полезный вспомогательный скрипт я сделал для составления корректных регулярных выражений. Идею навеяла замечательная бесплатная прога "The Regex Coach". The Regex Coach всем хороша, но часто она регуляные выражения понимает не так, как интерпретатор php. Моя идея была сделать страничку, в которой два текстовых поля. Первое для регулярного выражения, второе для исследуемого текста, а в третью область с помощью AJAX будет подгружаться результат экзекуции из php-скрипта. Результат должен выглядеть так. Всё соответствие регулярному выражению будет выделяться красной рамкой, чтобы было видно где оно начинается и заканчивается. Если в регулярном выражении использованы скобки, то результат должен помещаться в чёрную рамку и к нему добавляться индекс скобок.
Получилось следующее
Это файл index.htm

Код:
<html>
 
<head>
<meta http-equiv="Content-Language" content="ru">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Загрузка данных</title>
<script language="javascript">
 
function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == 'Microsoft Internet Explorer'){
        ro = new ActiveXObject('Microsoft.XMLHTTP');
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}
    
var http = createRequestObject();
    
function sndReq(action) {
    http.open('POST', 'regular.php', true);
    http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=WINDOWS-1251");
    http.onreadystatechange = handleResponse;
    http.send('regul='+action.regul.value+'&expression='+action.expression.value);//null
}
    
function handleResponse() {
    if(http.readyState == 4){
        var response = http.responseText;
 
    
 
            document.getElementById("view_text").innerHTML = response;
    }
}
 
</script>
 
</head>
 
<body>
<form>
<table border="0" width="100%" cellspacing="1" cellpadding="3">
    <tr>
        <td bgcolor="#C0C0C0" width="10%" valign="top">Регулярное выражение</td>
        <td>
 
<textarea rows="10" name="regul" cols="100" style="width: 100%" onKeyUp="sndReq(this.form)"></textarea></td>
    </tr>
    <tr>
        <td bgcolor="#C0C0C0" width="10%" valign="top">Преобразуемый текст</td>
        <td>
 
<textarea rows="10" name="expression" cols="100"  style="width: 100%" onKeyUp="sndReq(this.form)"></textarea></td>
    </tr>
    <tr>
        <td bgcolor="#C0C0C0" width="10%" valign="top">Результат</td>
        <td bgcolor="#CCFFFF" valign="top" height="300"><div id="view_text"></div></td>
    </tr>
</table>
<input type="button" value="Применить" onClick="sndReq(this.form)">
</form>
 
</body>
 
</html>

 
Это файл regular.php

Код:
<?php
header("Content-Type: text/html; charset=windows-1251");//Это нужно для корректного отображения русской кодеровки.
 
//Создаю массив всех кусков удовлетворяющего текста.
@preg_match_all("/$regul/", $expression, $regs, PREG_PATTERN_ORDER)
or die('<font color="red" size="5">Ошибка в синтаксисе регулярного выражения либо нет совпадений</font>');
 
$expression = htmlspecialchars($expression, ENT_QUOTES);//Избавляюсь от всех символов, мешающих выводу HTML
 
   $regs[0] = array_unique($regs[0]);//Оставляю только уникальные значения, чтобы str_replace() не наслаивала вывод
 
foreach ($regs[0] as $name => $value){//Запускаю цикл для преобразования строки
  $regs[0][$name] = htmlspecialchars($regs[0][$name], ENT_QUOTES);//Привожу к виду как $expression
  $regs1[0][$name] = $regs[0][$name];//Создаю новый массив на случай, если в регулярном выражении нет скобок
 
  /*Если в регулярном выражении есть скобки,
  то этот цикл возьмёт соответствующее им
  содержимое в чёрную рамку с зеленоватым
  фоном и индексом в верхнем регистре*/
  for($i=1; isset($regs[$i]); $i++){
     $regs[$i][$name] = htmlspecialchars($regs[$i][$name], ENT_QUOTES);
     $regs1[0][$name] = str_replace($regs[$i][$name],
     '<span style="background-color: #99FF99; border: 1px solid black;">'.$regs[$i][$name].'<sup>'.$i.'</sup></span>',
     $regs1[0][$name]);
  }
   
  //Всё, что полностью соответствует регулярному выражению забираю в красную рамку
  $expression = str_replace($regs[0][$name], '<span style="border: solid 1px red;">'.$regs1[0][$name].'</span>', $expression);
}
  //Рускодируем символы, которые почему-то приходят в UTF-8(необходим модуль iconv для php)
  $expression = iconv('UTF-8', 'windows-1251', $expression);
 
echo $expression;//Отдаём получившуюся строку браузеру
 
?>

Оба файла нужно поместить в одну папку на сервере с поддержкой php4 и пользоваться.
Несмотря на то, что эта конструкция не лишена некоторых глюков, но для отладки вполне пригодна.
Например, если встаёт задача вытащить данные из XML(Яndex.xml, курсы валют, информер погоды и т.д.) это может сильно пригодиться.
P.S. Модератор здесь смешной. Во всей России принято посылать на три буквы а от к окулисту. Заботиться о нашем здоровье

Всего записей: 4 | Зарегистр. 25-03-2007 | Отправлено: 15:30 25-03-2007
morjov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
danil74
походу дела ты поиздеваться пришёл...
 

Цитата:
Помню я какое-то время долго и упорно искал в литературе и инете полное описание суперглобальных массивов($_REQUEST, $_SERVER и т.д.), но так ничего толкового не нашёл. И тут мне пришла в голову идея написать скрипт, который будет выволить значения ключей всех уровней и значений исследуемого массива.

http://php.net и http://php.net/print_r в помощь!


----------
Баннер - это флаг, транспарант, растяжка. В Интернете это должно называться по другому. E-баннер.

Всего записей: 341 | Зарегистр. 05-01-2004 | Отправлено: 15:43 25-03-2007
Cheery



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

Цитата:
Модератор здесь смешной. Во всей России принято посылать на три буквы а от к окулисту.

посмеешься в другом месте..
 
блин, достало.. придется добавить еще и цензус на опыт, а то каждый, кто только принялся изучать php, спешит "внести свою лепту".
 
ps: добавил в шапку.. надоело уже читать извращенные решения.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 16:55 25-03-2007 | Исправлено: Cheery, 16:58 25-03-2007
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Модератор нормальный, не выпендривайтесь!
 
danil74, вместо view($var1, $var2) лучше использовать стандартную функцию print_r($var) намного быстрее и эффективнее.

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 21:31 25-03-2007
danil74



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Привет, Друзья.
Большое Спасибо за радушный приём. Меня радует резонанс, который вызвало моё первое сообщение в этом форуме, что даже такой авторитет как Cheery схватился за шапку. Вы безусловно правы, я действительно был не знаком с print_r(). Теперь мне это пригодится. Я даже рад, что ткнули носом. Но почему-то никто и никак не оценил моё второе творение про регулярные выражения. Сегодня мне это очень пригодилось. Я обнаружил, что regular.php работает намного стабильнее если строки
 
Цитата:
  //Рускодируем символы, которые почему-то приходят в UTF-8(необходим модуль iconv для php)  
  $expression = iconv('UTF-8', 'windows-1251', $expression);

удалить а взамен в самом начале файла после header вставить

Код:
 $expression = iconv('UTF-8', 'windows-1251', $expression);
 $regul = iconv('UTF-8', 'windows-1251', $regul);

Сегодня выношу на Ваш суд своё другое творение. Это скрипт для разбиения контента на страницы. Для тестового наполнения страниц я использовал очень длинный массив. Вы только не беспокойтесь о моих пальцах. Этот массив я не набивал руками, а создал вспомогательный javascript
Подробнее...
Этото скрипт не глючит и благополучно радует своей работой посетителей моих сайтов.
 
Добавлено:
Ой, Cheery, ты значит меня критикуешь, а у тебя самого чего-то форум стал какой-то перекошенный.

Всего записей: 4 | Зарегистр. 25-03-2007 | Отправлено: 21:10 26-03-2007 | Исправлено: Cheery, 21:14 26-03-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
danil74
интересно.. вы вообще русский язык понимаете? судя по коду вы только изучаете php.. я же просил не постить подобные вещи..
насчет второго поста с регуляркой.. программерам не нужны такие вещи - достаточно просто написать регулярку в пустой странице с кодом и посмотреть результат.
это раз.. второе - ваш код с ajax неправильно обработает данные, если в регулярке будет & или в тестируемом выражении.
третье.. сейчас никто не рассчитывает на register_globals=on
в четвертых..

Цитата:
//Рускодируем символы, которые почему-то приходят в UTF-8(необходим модуль iconv для php)  

справедливо только для IE (для остальных не нужно), так как он не воспринимает иначе в случае ajax
но даже и в этом случае вы

Цитата:
 header("Content-Type: text/html; charset=windows-1251");//Это нужно для корректного отображения русской кодеровки.

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


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 21:31 26-03-2007 | Исправлено: Cheery, 05:14 27-03-2007
morjov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
а может его "того" - в БАН?

----------
Баннер - это флаг, транспарант, растяжка. В Интернете это должно называться по другому. E-баннер.

Всего записей: 341 | Зарегистр. 05-01-2004 | Отправлено: 22:46 26-03-2007
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
danil74, убедительная просьба, когда выкладываешь скрипт для чтения делай его удобочитаемым, т.е. с пробелами, отступами и т.д.
Потом, а для чего нужен длинный массив?.. обычно это делается просто при помощи LIMIT START, COUNT в запросе к БД... и замечательно можно обойтись без длинного массива.
 
register_globals=on - зависит исключительно от желаний пользователя - хочешь включай, хочешь выключай, но в целях безопасности register_globals отключена.
 
Очень не советую использовать iconv, может я конечно ошибаюсь, но на работа этой функции зависит от того подключены ли кодовые страницы на сервере, если они не подключены, но их включение дело достаточно сложное. Вместо нее лучше прибегать при запросе к БД использовать в htaccess CharsetDisable On  и при запросе "SET CHARACTER SET кодировка".
 
Cheery! danil74 - молодец, пусть выкладывает скрипты, может чего-нибудь реально полезное выложит, а другие будут в процессе учиться на его ошибках. И вместо того, чтобы писать фразы в стиле "можно сделать..." лучше выложи свое гениальное решение - покажи другим, как это надо сделать!

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 23:32 26-03-2007
Cheery



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

Цитата:
И вместо того, чтобы писать фразы в стиле "можно сделать..." лучше выложи свое гениальное решение - покажи другим, как это надо сделать!

впредь попрошу быть осторожнее.. я не юноша, которого можно взять "на слабо", и подобные слова у меня просто отбивают желание продолжать общение.

Цитата:
Потом, а для чего нужен длинный массив?.. обычно это делается просто при помощи LIMIT START, COUNT в запросе к БД... и замечательно можно обойтись без длинного массива.  

а кто сказал, что она есть? или что не идет чтение из файла? или еще откуда, но не из базы..
насчет постраничного вывода из базы:  
PHP&MySQL: Постраничный вывод
так же есть и тема для постраничного вывода из текстового файла:
PHP: постраничный вывод данных из текстовой базы
 

Цитата:
Очень не советую использовать iconv, может я конечно ошибаюсь, но на работа этой функции зависит от того подключены ли кодовые страницы на сервере, если они не подключены, но их включение дело достаточно сложное

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

Код:
$limit=20;
$limit_page=5;
$c=count($a);
$page=intval($_GET['page']);  
$page=($page*$limit>=$c)?floor($c/$limit):($page<0?0:$page);
if($page>=$limit_page) echo"<a href='?page=".($page-$limit_page)."'>&lt;&lt;</a>";
$i=$bottom=floor($page/$limit_page)*$limit_page;
while($i<$bottom+$limit_page&&$i*$limit<=$c)
   echo (($i==$page)?(($i++)+1):"<a href='?page=$i'>".(($i++)+1)."</a>")." ";
if($page-$page%$limit_page+$limit_page<=$c/$limit) echo "<a href='?page=".($page+$limit_page)."'>&gt;&gt;</a>";
echo "<br>";
echo implode('',array_splice($a,$page*$limit,$limit));

 
 
ну и напоследок..

Цитата:
может чего-нибудь реально полезное выложит

слово может не имеет отношения к данному топику. зачем нам свалка непонятного мусора?

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:55 27-03-2007 | Исправлено: Cheery, 05:00 27-03-2007
danil74



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Привет, Cheery!!!
Ещё раз перечитал СОГЛАШЕНИЕ ПО ИСПОЛЬЗОВАНИЮ ФОРУМА «RU-BOARD» и не нашёл каких-либо причин неня предупреждать или банить. Если я лично Вас чем-либо, например
Цитата:
Модератор здесь смешной
обидил, извините, я не со зла.
Хочу расставить точки над i.

Цитата:
я же просил не постить подобные вещи..

Вообще я, как человек не лишённый недостатков (никто не идеален!!), могу иметь мнение, что мои скрипты самые гениальные в Мире, а Вы, по тем же причинам, можете их считать полным отстоем. И если я "извращенец, который этого не замечает", то запросто может найтись ещё много подобных "извращенцев", которым моё творчество очень понравится. Но Вы хозяин этого форума и поэтому вполне имеете возможность проводить политику "что хочу, то и ворочу". Вы можете здесь назвать объективные критерии, по которым я бы мог точно и однозначно определить достоин ли мой скрипт оказаться на страницах этого форума или нет? Быть может мне сначала высылать свой скрипт Вам на почту и только после получения одобрения публиковать здесь? Поскольку даже некрасивый, но работоспособный код трудно написать, такие письма будут нечастыми и не будут Вас сильно обременять.

Цитата:
эта тема НЕ предназначена для обсуждения ваших возможностей или недостатков

Мне интересно Ваше мнение. Какие, по вашему, побуждающие мотивы заставляют людей оторваться от повседневных дел и писать сообщения на форум? Ведь вместо публикации программных кодов можно поиграться на компе, почитать, покодить, погулять и т.д.
Человек так устрен, что всегда всё делает только для себя. Как писал профессор Павлов "нам не нужно ничего, кроме наших нервных ощущений"(человеческий разум он тоже считал феноменом нервной системы). Примечательно, что даже детей рождают думая только о себе. На мой вопрос "зачем вы родили себе ребёнка" обычно отвечают, что им (родителям) очень захотелось поняньчиться и чтобы "в старости было кому стакан воды подать".
 
Мне бы хотелось получить внятный ответ о Вашем отношении ко мне и мнеподобным, чтобы точно знать как поступить дальше. Мне просто лень искать другой форум, но если нужно, то, ИМХО, найду и осяду там.




предупреждение номер раз. пост не касающийся данной темы /Cheery/
п. 2.8.2. главы VIII Соглашения по использованию
п. 2.15. главы VIII Соглашения по использованию

Всего записей: 4 | Зарегистр. 25-03-2007 | Отправлено: 05:37 28-03-2007 | Исправлено: Cheery, 06:14 28-03-2007
ply

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

Код:
 
function pagination($current,$count,$url,$spread=2,$class='pagination') {
    if ($count<2) return true;
    $url = SITEURL.$url;
    $out = '<div class="'.$class.'">'.PAGES.': ';
    $out .= '<a href="'.str_replace('##',1,$url).'">1</a>';
    if ( ($current-$spread-1-1)>2 ) {$out .= ' ...';$i=$current-$spread;}
    else $i = 2;
    if ( ($count-$current-$spread-1)>2 ) {$end=$current+$spread;}
    else $end = $count - 1;
 
    for ($i=$i;$i<=$end;$i++) $out .= ' <a href="'.str_replace('##',$i,$url).'">'.$i.'</a>';
 
    if ($end!=($count-1)) $out .=' ...';
 
    if ($count!=1) $out .= ' <a href="'.str_replace('##',$count,$url).'">'.$count.'</a></div>';
 
    $out = str_replace('<a href="'.str_replace('##',$current,$url).'">'.$current.'</a>', '<b>'.$current.'</b>', $out);
    return $out.'</div>';
}
 

в url пердается ссылка, куда будут ссылаться номера страниц. Вместо номера страницы в ссылке надо поставить ##

Всего записей: 189 | Зарегистр. 13-05-2006 | Отправлено: 19:01 08-04-2007 | Исправлено: ply, 19:03 08-04-2007
G_Drey_V

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
я прям какой-то критикан, но, как я уже говорил, код надо отделять от верстки!!! иначе эта функция теряет всекую смысловую нагрузку, т.к. применима только к данной верстке!
а что за константа PAGES?
никогда так не делай: "$i = $i"! Это ужасно.
вместо $i++ лучше использовать ++$i.

Цитата:
$out = str_replace('<a href="'.str_replace('##',$current,$url).'">'.$current.'</a>', '<b>'.$current.'</b>', $out);  

- это не самый лучший вариант, лучше это проверять в процессе создания ссылок.
а еще мне интересно мнение народа - как вы относитесь в списке страниц к кнопке "далее"? мне, например, не нравится, когда я не могу выбрать страницу, а должен передвигаться по одной до нужной страницы.. а если мне нужна страница номер 152, то как мне туда попасть с первой?




Блин.. непонятно было сказано? тема не для обсуждений? /Cheery/

Всего записей: 158 | Зарегистр. 20-12-2003 | Отправлено: 21:20 08-04-2007 | Исправлено: Cheery, 04:55 09-04-2007
PRGMM

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Огромная просьба подсказать, как можно сделать более компактным , удобным,  красивым этот скрипт.  
Не судите строго !!!




Для тех, кто в танке.. здесь не задают вопросов и не обсуждают решения /Cheery/

Всего записей: 11 | Зарегистр. 22-04-2007 | Отправлено: 23:24 22-04-2007 | Исправлено: Cheery, 23:24 22-04-2007
PRGMM

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прикол какойто кретин убрал мой код, для чего форум придумали ???  
 А еще боремся за образцовый дом культуры ...




А для кого правила придумали? Еще одна подобная выходка и бан /Cheery/

Всего записей: 11 | Зарегистр. 22-04-2007 | Отправлено: 08:01 23-04-2007 | Исправлено: Cheery, 08:03 23-04-2007
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сегодня переносил сайт на другой хост и обнаружил, что в PHP 4 нет столь нужной функции str_ireplace. Но это не помеха:

Код:
if(!function_exists('str_ireplace'))  
  {
  function str_ireplace($search,$replace,$subject)  
    {
    $search = preg_quote($search, "/");
    return preg_replace("/".$search."/i", $replace, $subject);  
    }
  }

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 08:41 23-04-2007
PRGMM

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
 ты издеваешься, я написал то что реально может помочь людям . Один минус, я не профессионал (пока) . Вот была надежда , реально отшлифовать скрипт.




Неумеющие читать (шапки и правила) нам на форуме не нужны /Cheery/
ps: и хватит флеймить.. все вопросы - в пм.. для обсуждения своих потуг создаем отдельные темы, а не гадим в подобных

Всего записей: 11 | Зарегистр. 22-04-2007 | Отправлено: 22:35 23-04-2007 | Исправлено: Cheery, 23:38 23-04-2007
driverok



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Такой мини-скриптик для удаления из строки повторяющихся символов (использовал для удаления пробелов)

Код:
 
 
$good = str_replace (" ","*",$good); //замена  всех пробелов на *
 
//оставляем только одну подряд звездочку
while (strpos($good,'**')){
    $good = str_replace ("**","*",$good);
}
 
//теперь $good содежит не более одного пробела подряд
 

Всего записей: 91 | Зарегистр. 02-08-2004 | Отправлено: 23:57 27-04-2007
Cheery



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

Цитата:
Если ты только взялся изучать php - не стоит сюда писать, так как, заведомо, у тебя не будет такого решения  

это вас тоже касается.

Код:
$str=preg_replace('/\s{2,}/'," ",$str)

решает это в одну строчку


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:07 28-04-2007 | Исправлено: Cheery, 00:16 28-04-2007
sTa1kEr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скрипт для автоинклюда(через магическую функцию __autoload()) файлов с классами. Только не по имени класса (как это показано в примере на php.net), а по реальному нахождению классов. Может ускорить разработку для истинных любителей ООП и снять головную боль с инклюдами. Подробнее...
 
Использовать его очень просто. Задаете пути к сайту, директории с классами и глубину сканирования и инклюдите его. Далее можете в любом месте вашего скрипта сразу обращаться к классам в заданной директории.
 
Надеюсь его можно отнести к уникальным и/или оригинальным и/или красивым решениям

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 18:07 03-05-2007 | Исправлено: sTa1kEr, 18:10 03-05-2007
Cheery



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

Цитата:
Надеюсь его можно отнести к уникальным и/или оригинальным и/или красивым решениям

но не своим же.. напоминает из  PHP 5. В подлиннике. 2005 года

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:47 03-05-2007
sTa1kEr



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

Цитата:
но не своим же..  

От первого до последнего байта своим (включая идею). А то что все уже давно придумано до нас - это известный факт. Т.ч. я не отрицаю, что возможно кто-то уже написал и опубликовал похожее решение. Мне же проще и интереснее (и чаще быстрее) написать самому, чем искать где-либо готовое.

Цитата:
напоминает из  PHP 5. В подлиннике. 2005 года

Это книга? Или же можно ссылку на источник?

Всего записей: 279 | Зарегистр. 28-07-2005 | Отправлено: 20:08 03-05-2007
Cheery



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

Цитата:
Это книга? Или же можно ссылку на источник?

да, книга.. нет, там написано несколько иначе, так что пойдет.. и не будем тут это обсуждать

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:12 03-05-2007
Jokerjar



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вывод даты нормальным русским языком:
 

Код:
function rusdate($d)    
{  
  $montharr = array("января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря");  
  $i =  date("m",$d) - 1;  
  return date("j",$d)." $montharr[$i] ".date("Y",$d);  
}

Узнаем серверное время со сдвигом часовых поясов:
 

Код:
function zonetime($date,$zone)
{
  $date+=$zone*3600;
  return gmdate("d.m.Y H:i",$date);
}

Например, echo
Код:
zonetime(time(),+3);
покажет московское время (независимо от того, в каком поясе расположен сервер )
 
Следующий скрипт весьма полезен (писал для своей гостевой). Выводит мыла таким образом, чтоб их не смогли воровать роботы-собиральщики мыл (во как):
 

Код:
function showemail($email)
{
  echo "<script language=\"JavaScript\"><!--\n".
  "document.write('".substr($email,0,strpos($email,"@"))."'+'@'+'".
  substr($email,strpos($email,"@")+1,strpos($email,".")-strpos($email,"@")-1)."'+'.'+'".
  substr($email,strpos($email,".")+1, strlen($email) - strpos($email,".")-1)."');\n".
  "//--></script>\n";
}

(подразумевается, что используется валидный параметр вида бла@бла.бла, проверку мутите еще при вносе в БД мыла =))

Всего записей: 591 | Зарегистр. 22-03-2006 | Отправлено: 07:31 27-05-2007
Cheery



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

Цитата:
Следующий скрипт весьма полезен (писал для своей гостевой). Выводит мыла таким образом, чтоб их не смогли воровать роботы-собиральщики мыл (во как):

и при чем тут php??  
Защита от спама: способы сокрытия e-mail-адресов
php просто формирует код страницы и никоим образом не относится к защите
 
 

Цитата:
Вывод даты нормальным русским языком:

было уже

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:09 28-05-2007
RealAnaphema



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
В процессе работы над проектом столкнулся с необходимостью частого создания XML-документов в разных местах. Немного напрягся и сваял пару функций для преобразования массива любой вложенности в XML (а точнее в DOMDocument [PHP 5]).
 
Вот сами функции:

Код:
 
  function doNode($_name, $_data, $_dom) {
    $node = $_dom->createElement($_name);
      # Обработка атрибутов
      if(is_array($_data['@']))
        foreach($_data['@'] as $k => $v)
          $node->setAttribute($k, $v);
      # Обработка элементов
      if(is_array($_data['#']))
        foreach($_data['#'] as $k => $v)
          if(is_array($v))
            $node->appendChild(doNode($k, $v, $_dom));
          else
            $node->appendChild($_dom->createElement($k, $v));
      # Обработка списка
      if(is_array($_data['$']))
        foreach($_data['$']['^'] as $elem)
          $node->appendChild(doNode($_data['$']['%'], $elem, $_dom));
    return $node;
  }
   
  function doXML($_data) {
    $dom = new DOMDocument('1.0', 'utf-8');
    foreach($_data as $name => $node)
      $dom->appendChild(doNode($name, $node, $dom));
    $dom->formatOutput = true;
    return $dom;
  }
 

 
Вот пример вызова:

Код:
 
  $data = array(
    'root' => array(
      '@' => array(
        'attr1' => 'Атрибут 1',
        'attr2' => 'Атрибут 2'
      ),
      '#' => array(
        'elem1' => 'Элемент 1',
        'elem2' => array(
          '#' => array(
            'subelem1' => 'СубЭлемент 1',
            'subelem2' => array(
              '@' => array(
                'subsubattr1' => 'СубСубАтрибут 1',
                'subsubattr2' => 'СубСубАтрибут 1'
              ),
              '#' => array(
                'subsubelem1' => 'СубСубЭлемент 1',
                'subsubelem2' => 'СубСубЭлемент 2'
              )
            ),
            'subelem3' => 'СубЭлемент 3'
          ),
        ),
        'errorlist' => array(
          '@' => array('count' => 3),
          '$' => array(
            '%' => 'error',
            '^' => array(
              array(
                '@' => array('id' => 'Error 1', 'time' => time()),
                '#' => array('message' => 'Message 1')
              ),
              array(
                '@' => array('id' => 'Error 2', 'time' => time()),
                '#' => array('message' => 'Message 2')
              ),
              array(
                '@' => array('id' => 'Error 3', 'time' => time()),
                '#' => array('message' => 'Message 3')
              )
            )
          )
        )
      )
    )
  );
 
  echo(doXml($data)->saveXML());
 

 
Недостаток: можно запутаться в структуре массива данных
 
Пояснения по индексам массива:
1. @ - массив атрибутов XML-элемента
2. # - массив элементов с разными именами
3. $ - массив элементов с одинаковыми именами, далее см. 4 и 5
4. % - название элемента этого списка
5. ^ - собсна сам массив элементов
 
Если кто обнаружит баги - пишите в ПМ.
Спасибо за внимание.

Всего записей: 1 | Зарегистр. 15-06-2007 | Отправлено: 15:29 15-06-2007 | Исправлено: RealAnaphema, 15:30 15-06-2007
andymc

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

Код:
/**
 * Подключает файл $file и возврвщает результат его работы (HTML)
 * Полезно, если вам нужно получить контент инклюда не выводя его сразу
 */
function getIncludeContents($file) {
    ob_start();    
    if (is_file($file)) {
        include($file);
    } else {
        ob_clean();
        return '';
    }    
    $string = ob_get_contents();
    ob_clean();
    return $string;
}
 
/**
 * Создание элементов <option> из массива  
 * @ $array - массив
 * @ $opt   - опции
 *    если $opt = keys именами будут ключи массива
 *    если $opt = base значениями будут basename файла значений  
 * @ $selected_value - выбранное значение
 */
function draw_array_options($array, $opt = '', $selected_value = '') {
    $s = '';
    foreach ($array as $k => $v) {
        $opt == 'keys' ? $value = "value='$k'" : $value = '';
        $opt == 'base' ? $v = basename($v) : true;
        if (!empty($selected_value) && $selected_value == $v) {
            $s .= "<option $value selected>$v</option>";
        } else {
            $s .= "<option $value>$v</option>";
        }            
    }
    return $s;
}
 
/**
 * Размер массива в символах
 */
function array_size($array) {
    $size = 0;
    foreach ($array as $k => $v) {
        if (is_array($v)) {
            $size += array_size($v);
        } else {
            $size += strlen($v);
        }
    }
    return $size;
}
 

Но одно из самых полезнейших решений - это класс для создания таблиц, который я может быть выложе позже

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 16:27 15-06-2007 | Исправлено: andymc, 16:28 15-06-2007
sr_Fluke



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Народ кто поможет студент с зачетем? Пожалуйста, очень надо....
 
 
 
Просто в PHP вообще не шарю...




тем, кто не умеет читать, мы не помогаем /Cheery/

Всего записей: 9 | Зарегистр. 15-06-2007 | Отправлено: 14:28 24-06-2007 | Исправлено: Cheery, 20:34 25-06-2007
Brodyaga



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
sr_Fluke
Зрение проверить трудно?
Цитата:
Публикуем решения, а не задаем вопросы!  

В первом сообщении ОГРОМНЫМИ буквами это написано. Создай тему и там задавай свои вопросы.

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 15:28 24-06-2007
SergeyLarionov

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

Код:
 
<?php
$report_mail= 'test@test.ru';
$time_limit    = 0;
 
$begin_ip    = isset($_GET['begin_ip'])?    $_GET['begin_ip']:    '127.0.0.1';
$end_ip        = isset($_GET['end_ip'])?    $_GET['end_ip']:    '127.0.0.1';
$port        = isset($_GET['port'])?        $_GET['port']:        '80';
$scan        = isset($_GET['scan']);
function check_ip($ip) {
    $re = '/^(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})$/';
    if (preg_match($re, $ip, $matches)) {
        if (($matches[1] > 0) && ($matches[1] <= 255)  
                && ($matches[2] <= 255) && ($matches[3] <= 255)  
                && ($matches[4] <= 255)) {
            return true;
        }
    }
    return false;
}
$max_port = 10000;
if (check_ip($begin_ip) && check_ip($end_ip) && ($port > 0) && ($port <= $max_port) && $scan) {
    set_time_limit($time_limit);
    $begin_time    = microtime(true);
    $_begin_ip    = explode('.', $begin_ip);
    $_end_ip     = explode('.', $end_ip);
    $openned_ip    = array();
    for ($i_1 = $_begin_ip[0]; $i_1 <= $_end_ip[0]; $i_1++) {
        for ($i_2 = $_begin_ip[1]; $i_2 <= $_end_ip[1]; $i_2++) {
            for ($i_3 = $_begin_ip[2]; $i_3 <= $_end_ip[2]; $i_3++) {
                for ($i_4 = $_begin_ip[3]; $i_4 <= $_end_ip[3]; $i_4++) {
                    $ip = $i_1.'.'.$i_2.'.'.$i_3.'.'.$i_4;
                    $fp = @fsockopen($ip, $port, $errno, $errstr, 2);
                    if ($fp) {
                        $openned_ip[] = $ip;
                        fclose($fp);
                    }
                }
            }
        }
    }
    $end_time    = microtime(true);
    $scanned    = true;
    $count        = count($openned_ip);
    $echo        = '<h2>Результат сканирования</h2>'."\r\n"
        .'Кол-во адресов с открытым <b>'.$port.'</b> портом: <b>'.($count)." шт</b><br />\r\n"
        .'Время сканирования: <b>'.number_format($end_time - $begin_time, 2, '.', ' ').' сек</b><br />'."\r\n"
        ."Адреса:<br />\r\n";
    for($i = 0; $i < $count; $i++) {
        $echo .= $openned_ip[$i]."<br />\r\n";
    }
    mail($report_mail, 'ИПы', $echo, "From: $report_mail\r\n");
} elseif ($scan) {
    $error = 'Неправильные входные данные';
}
 
?>
<html>
<head>
    <title>Сканер порта в диапазоне адресов</title>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <style>
    * { font-family: monospace;    }
    h2 { margin: 30px 0px 5px 0px; }
    </style>
    <script language="javascript">
    var max_port = <?=$max_port?>;
    function check_ip(ip) {
        var re = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/;
        if (re.test(ip)) {
            if ((RegExp.$1 > 0) && (RegExp.$1 <= 255) && (RegExp.$2 <= 255) && (RegExp.$3 <= 255) && (RegExp.$4 <= 255)) {
                return true;
            }
        }
        return false;
    }
    function form_onsubmit() {
        var frm = document.frm_scaner;
        var begin_ip = frm.begin_ip.value,
            end_ip = frm.end_ip.value,
            port = frm.port.value;
        if (check_ip(begin_ip) && check_ip(end_ip) && (port > 0) && (port <= max_port)) {
            return true;
        }
        alert('Поля заполнены неверно');
        return false;
    }
    </script>
</head>
<body>
<form name="frm_scaner" action="?" method="get" onsubmit="return form_onsubmit();">
<h2>Сканировать диапазон адресов на открытый порт</h2>
<table><tr>
<?=(($error != '')? '<td colspan="2" style="color: red; font-weight: bold;">Ошибка: '.$error."</td>\r\n</tr><tr>\r\n": '')?>
    <td>Начало диапазона:</td>
    <td><input type="text" name="begin_ip" value="<?=$begin_ip?>" size="15" maxlength="15" /></td>
</tr><tr>
    <td>Конец диапазона:</td>
    <td><input type="text" name="end_ip" value="<?=$end_ip?>" size="15" maxlength="15" /></td>
</tr><tr>
    <td>Порт:</td>
    <td><input type="text" name="port" value="<?=$port?>" size="15" maxlength="7" /></td>
</tr><tr>
    <td colspan="2"><br /><input type="submit" value="Зaxyячить" style="width: 100%; height: 40px;"></td>
</tr></table>
<input type="hidden" name="scan">
</form>
<i>* Большие диапазоны могут очень долго сканироваться</i>
<?php
if ($scanned) {
    echo $echo;
}
?>
</body>
</html>
 

В свое время потребовался код, который бы сканировал все адреса в определенном диапазоне на открытый определенный порт и который бы по прошествии сканирования отсылал бы отчет на почту... Собственно, мож кому пригодится =))
 
Добавлено:

Код:
 
function get_field_comment($table_name, $field) {
    $sql = 'SHOW FULL COLUMNS FROM '.$table_name.' LIKE "'.$field.'"';
    $result = mysql_query($sql);
    if (@mysql_num_rows($result) > 0) {
        $row = mysql_fetch_assoc($result);
        return $row['Comment'];
    } else {
        return false;
    }
}
 
function get_table_comment($table_name) {
    $sql = 'SHOW TABLE STATUS LIKE "'.$table_name.'"';
    $result = mysql_query($sql);
    if (@mysql_num_rows($result) == 1) {
        $status = mysql_fetch_assoc($result);
        return $status['Comment'];
    } else {
        return false;
    }
}
 

Две ф-ии, котрые позволяют узнать коментарии к полю в таблице и самой таблицы MySQL.

Всего записей: 17 | Зарегистр. 20-06-2007 | Отправлено: 15:25 26-06-2007 | Исправлено: SergeyLarionov, 15:36 26-06-2007
leb5teR

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Не скажу на счет полезности... но думаю вполне оригинально... ;D
 
Генетический алгоритм, Диафантово уравнение:
 

Код:
<?php
 
    Error_Reporting(E_ALL & ~E_NOTICE);
 
#---------- ПРЕДКИ (случайные решения) ----------#
    function FRandHromosome() {
 
        global $Result,$MaxPop;
 
        for($i=0;$i<$MaxPop;$i++) {
            $coeff_a=rand(1,$Result);
            $coeff_b=rand(1,$Result);
            $coeff_c=rand(1,$Result);
            $coeff_d=rand(1,$Result);
 
            $Gene[$i]=array("coeff_a"=>$coeff_a,"coeff_b"=>$coeff_b,"coeff_c"=>$coeff_c,"coeff_d"=>$coeff_d);
 
            echo "<TABLE border=0 cellspacing=0 cellpadding=0><TR>";
            echo "<TD align=\"center\">".$Gene[$i]["coeff_a"];
            echo "<TD align=\"center\">".$Gene[$i]["coeff_b"];
            echo "<TD align=\"center\">".$Gene[$i]["coeff_c"];
            echo "<TD align=\"center\">".$Gene[$i]["coeff_d"];
            echo "</TABLE>";
        }
 
        return $Gene;
 
    }
 
продолжение...
 
?>

 
тут только основной алгоритм... а ТУТ скрипт в работе + описание...

Всего записей: 6 | Зарегистр. 29-01-2007 | Отправлено: 22:47 23-07-2007
andymc

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

Код:
/**
 * Класс для массовых операция с файлами
 * @date 15.09.2007
 * @author Andrew Ogibin
 */
/* example
function test($file) {
    if (substr($file, strlen($file) - 7) == 'html.en') {
        $filen = str_replace('html.en', 'html', $file);
        echo rename($file, $filen);
    }    
}
$fi = new FilesIterator('manual');
$fi->iterate('test');
*/
class FilesIterator {
    
    var $files = array();
    var $extensions = array();
    var $dir, $subdirs, $dirs;
    
    /**
     * Констркутор
     * @param string  Папка с файлами
     * @param boolean Надо ли сканировать поддиректории
     * @param boolean Надо ли собирать директории в массив вместе с файлами
     */
    function FilesIterator($directory, $subdirs=true, $dirs=false) {
        $this->directory = $directory;
        $this->subdirs = $subdirs;
        $this->dirs = $dirs;
    }
    
    /**
     * Устанавливает расширения, которые надо учитывать
     * @param array Массив расишрений
     */
    function setExt($ext) {
        if (is_array($ext)) {
            $this->extensions = $ext;
        } else {
            $this->extensions = func_get_args();
        }
    }
    
    /**
     * Заупскает проход по файлам и вызов функции $function с параметров - путь к файлу
     */
    function iterate($function) {
        if (!is_callable($function)) {
            echo 'Неверная функция "'.$function.'"';
            return false;
        }
        $this->files = $this->_getFiles($this->directory, $this->subdirs, $this->dirs);
        foreach ($this->files as $k => $file) {
            $function($file);
        }        
    }
 
    function _getFiles($dir, $subdirs=true, $dirs=false){
        $d = opendir($dir);
        $files = array();
        while ($file = readdir($d)) {
            if ($file == '.' || $file == '..') {
                continue;
            }            
            $file = $dir . '/' . $file;
            if (is_dir($file)) {
                if ($subdirs) {
                    $files = array_merge($files, $this->_getFiles($file, $subdirs, $dirs));
                }                
                if ($dirs) {
                    $files []= $file;
                }
            } else {
                $p = pathinfo($file);
                if (isset($p['extension']) && count($this->extensions) > 0 && !in_array($p['extension'], $this->extensions)) {
                    continue;
                }            
                $files []= $file;
            }
        }
        return $files;
    }
    
    // служебная: обрабатывает запись строки в файл
    function _write($file, $str, $mode = 'w+'){
        if (!file_exists($file) || !is_file($file)){
            return false;
        }
        $fo = fopen($file, $mode);
        $a = fwrite($fo, $str);
        fclose($fo);
        return $a;
    }
}
 

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 00:36 23-09-2007
zerkms

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
andymc
класс ужасный. посмотрите на SPL

----------
tvfёdor - оперативно уведомляет о раздачах rutracker | Блог об иммиграции в Новую Зеландию

Всего записей: 387 | Зарегистр. 07-05-2004 | Отправлено: 03:20 23-09-2007
andymc

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

Код:
/**
 * Расширение date(), понимающее русские буквы:  
 *   м - январь
 *   М - января
 *   д - воскресенье
 *   Д - вс
 * используйте backslash, чтобы использовать эти буквы как есть
 */
function datex($format, $timestamp=null) {
    $timestamp = intval($timestamp) == 0 ? time() : $timestamp;
    $array1    = array('январь','февраль','март','апрель','май','июнь','июль','август','сентябрь','октябрь','ноябрь','декабрь');
  $array2    = array('января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
    $array3    = array('воскресенье', 'понедельник', 'вторник', 'среда', 'четверг', 'пятница', 'суббота');
    $array4    = array('вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб');
    $m1        = $array1[date('n', $timestamp)-1];
    $m2        = $array2[date('n', $timestamp)-1];
    $m3        = $array3[date('w', $timestamp)];
    $m4        = $array4[date('w', $timestamp)];    
    $format    = preg_replace('@(?<!\\\)м@', $m1, $format);
    $format    = preg_replace('@(?<!\\\)М@', $m2, $format);
    $format    = preg_replace('@(?<!\\\)д@', $m3, $format);
    $format    = preg_replace('@(?<!\\\)Д@', $m4, $format);    
    return date($format, $timestamp);
}

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 20:04 03-10-2007
Oleg_de



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Рекурсивно вывести пройтись по всем елементам Hash/Array
 

Код:
 
function hash_array($name,$array){
    if(is_array($array)){
        ksort($array);
        while(list($id,$value)=each($array)){
            if(is_array($value)){ reset($value); $t=$name."['".$id."']";  hash_array($t,$value); }
            else{ echo $name,"['",$id,"']=$value\n"; }
        }
    }
    else{ echo $array,"\n"; }
     
return;
}
# Пример:
echo "<pre>";  hash_array('$_SERVER',$_SERVER); echo "</pre>";
echo "<pre>";  hash_array('$_REQUEST',$_REQUEST); echo "</pre>";
echo "<pre>";  hash_array('$_COOKIE',$_COOKIE); echo "</pre>";


----------
Германия глазами переселенцев и мигрантов ...

Всего записей: 336 | Зарегистр. 03-09-2001 | Отправлено: 12:43 02-11-2007 | Исправлено: Oleg_de, 15:00 29-11-2007
Cheery



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

Цитата:
generaly_array_ausgabe($t,$value);

???
для таких вещей и print_r достаточно.


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:05 02-11-2007 | Исправлено: Cheery, 18:05 02-11-2007
Oleg_de



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

Цитата:
 для таких вещей и print_r достаточно.

я неправильно сформулировал:
 
"пройтись по всем елементам."
 
и если надо то что-то и сделать с ними
 
 
 


----------
Германия глазами переселенцев и мигрантов ...

Всего записей: 336 | Зарегистр. 03-09-2001 | Отправлено: 18:47 02-11-2007
vv07



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем программерам мое почтение!Если я залез не в ту тему,прошу извинения,но нужного мне так и не нашел.У меня проблема такая.Я использую Custom Buttons - расширение для браузера Mozilla Firefox, позволяющее добавлять собственные кнопки на панели инструментов.
С его помощью хочу создать свой тулбар,типа панели для тэгов,на форумах.
Скрин сдесь http://forum.ru-board.com/topic.cgi?forum=5&bm=1&topic=24579&start=140#lt.Нижний статус бар.Но как я понял,это расширение http://xsms.nm.ru/custombuttons/#bbcode работает только с BBCode.Некоторые кнопки я взял с их сайта.Что то там, сделал на основе их кнопок,но это не полный тулбар.Мне нужна помощь,так как сам я, увы не силен в этом.Могу использовать уже готовое.Мне нужны кнопки с фреймами,типа цвет и размер шрифта.На форумах все в PHP,не стибрить.Может кто поможет мне и напишет коды для таких кнопок, в ВВС коде.Буду весьма признателен.Сразу оговорюсь,никаких намерений,только для моего личного использования.В случае создания тулбара,как расширения,обязательная ссылка на автора кодов.




читаем внимательно шапку /Cheery/

Всего записей: 4021 | Зарегистр. 04-07-2006 | Отправлено: 06:11 07-11-2007 | Исправлено: Cheery, 06:16 07-11-2007
immotus



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




К окулисту, если проблемы со зрением.. надоели /Cheery/

Всего записей: 1436 | Зарегистр. 27-07-2007 | Отправлено: 10:57 08-11-2007 | Исправлено: Cheery, 19:07 08-11-2007
informesrab

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Пытаюсь получить количество записей из таблицы base, нашел пример но немогу понять почему после выполнения запроса количество записей не передается в переменную per1, может несовсем правильный запрос ?
 
 Добавлено:
Спасибо вопрос снят, надо использовать функцию mysql_fetch_row.




к окулисту.. потом читать шапку, если умеем /Cheery/

Всего записей: 17 | Зарегистр. 16-06-2007 | Отправлено: 11:28 15-11-2007 | Исправлено: Cheery, 20:30 15-11-2007
Daiz13



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
функция для уменьшения и ОБРЕЗАНИЯ изображения до строго заданного размера.
Дополнительно можно задать  
$padding - отступ, отрежется от изображения перед уменьшением.
$horizontal_align, $vertical_align - положение вырезаемого участка, по умолчанию вырезается центральная часть
 

Код:
 
function resize_and_crop_image($filename,  $width= 200, $height = 200, $jpeg_quality = 80, $horizontal_align = 0, $vertical_align = 0, $padding = 0) {
    if (function_exists('exif_imagetype')) {
        $img_type = exif_imagetype($filename);
    } else {
        list($img_width, $img_height, $img_type, $img_atr) = getimagesize($filename);
    }
    switch ($img_type) {
        case IMAGETYPE_GIF:
            $image_create = 'imagecreatefromgif';
            $image_output = 'imagegif';
            break;
 
        case IMAGETYPE_JPEG:
            $image_create = 'imagecreatefromjpeg';
            $image_output = 'imagejpeg';
            break;
 
        case IMAGETYPE_PNG:
            $image_create = 'imagecreatefrompng';
            $image_output = 'imagepng';
            break;
 
        default:
            trigger_error('resize_image: Unknown image type - '.$img_type, E_USER_NOTICE);
            return FALSE;
    }
    if (!function_exists($image_create) || !function_exists($image_output)) {
        trigger_error('resize_image: Required images handling functions are not available', E_USER_NOTICE);
        return FALSE;
    }
    $img = $image_create($filename);
    if (function_exists('imageantialias')) {
        imageantialias($img, true);
    }
    if ($img) {
        $source_width  = imagesx($img);
        $source_height = imagesy($img);
        $scale  = min($source_width/$width, $source_height/$height);
        $new_width  = floor($scale*$width);
        $new_height = floor($scale*$height);
        $src_x = 0;
        $src_y = 0;
        if ($padding > 1){
            $padding_x = floor(  ($new_width  - max($width, $new_width - $padding)) / 2 );
            $padding_y = floor(  ($new_height - max($height, $new_height - $padding)) / 2);
        } else if ($padding > 0) {
            $padding_x = floor(  ($new_width  - max($width, floor($new_width*(1 - $padding) ))) / 2 );
            $padding_y = floor(  ($new_height  - max($height, floor($new_height*(1 - $padding) ))) / 2 );
        } else {
            $padding_x = 0;
            $padding_y = 0;
        }
        $new_width  = $new_width  - $padding_x*2;
        $new_height = $new_height - $padding_y*2;
        $src_x      = $padding_x;
        $src_y      = $padding_y;
 
        if ($padding>0){
            $horizontal_crop    = $source_width  - $new_width - $padding_x*2;
            $vertical_crop      = $source_height - $new_height - $padding_y*2;
        } else {
            $horizontal_crop    = $source_width  - $new_width;
            $vertical_crop      = $source_height - $new_height;
        }
        if ($horizontal_crop){
            if (empty($horizontal_align)){
                $horizontal_align = 'center';
            }
            switch($horizontal_align){
                case 'left':
                    break;
 
                case 'right':
                    $src_x      += $horizontal_crop;
                    break;
 
                case 'center':
                    $src_x      += floor($horizontal_crop/2);
                    break;
 
                default:
                    if (is_numeric($horizontal_align) && intval($horizontal_align)>0){
                        $horizontal_crop = min($horizontal_crop, intval($horizontal_align));
                        $src_x      += $horizontal_crop;
                    } else {
                        $src_x      += floor($horizontal_crop/2);
                    }
                    break;
            }
        }
        if ($vertical_crop){
            if (empty($vertical_align)){
                $vertical_align = 'center';
            }
            switch($vertical_align){
                case 'top':
                    break;
 
                case 'bottom':
                    $src_y      += $vertical_crop;
                    break;
 
                case 'center':
                case 'middle':
                    $src_y      += floor($vertical_crop/2);
                    break;
 
                default:
                    if (is_numeric($vertical_align) && intval($vertical_align)>0){
                        $vertical_crop = min($vertical_crop, intval($vertical_align));
                        $src_y      += $vertical_crop;
                    } else {
                        $src_y      += floor($vertical_crop/2);
                    }
                    break;
            }
        }
        if ($scale > 1) {
            if( function_exists ('imagecreatetruecolor') ) {
                $tmp_img = imagecreatetruecolor($width, $height);
            } else {
                $tmp_img = imagecreate($width, $height);
            }
            if (function_exists('imagecopyresampled')) {
                imagecopyresampled($tmp_img, $img, 0, 0, $src_x, $src_y, $width, $height, $new_width, $new_height);
            } else {
                imagecopyresized($tmp_img, $img, 0, 0, $src_x, $src_y, $width, $height, $new_width, $new_height);
            }
            imagedestroy($img);
            $img = $tmp_img;
        }
    }
    // Create error image if necessary
    if (!$img) {
        $img = imagecreate($max_width, $max_height);
        $bgc = imagecolorallocate ($img, 255, 0, 0);
        $tc  = imagecolorallocate ($img, 255, 255, 255);
        imagefilledrectangle ($img, 0, 0, $max_width, $max_height, $bgc);
        imagestring ($img, 3, 3, 10, "Error", $tc);
    }
    $img = $image_output($img, $filename, $jpeg_quality);
    return TRUE;
}
 
 

Всего записей: 257 | Зарегистр. 06-06-2001 | Отправлено: 02:59 23-11-2007
xRySt

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте! В данный момент времени я страдаю одной проблемой и думаю, что именно здесь мне помогут)))





Страдайте и дальше, но научитесь читать шапки. Здесь не задают вопросов /Cheery/

Всего записей: 1 | Зарегистр. 24-07-2007 | Отправлено: 01:06 23-12-2007 | Исправлено: Cheery, 01:08 23-12-2007
Vlad1778

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поделюсь и своим кривым решением - может кто лучшее подскажет
 
Разбирая запросы поисковиков, столкнулся с проблемой перекодировки из UTF-8 вернее с тем, как распознать. что текст пришел в ней.
Делаю это так
 
if(preg_match("!([РС].){3,}!",$text)) $text=iconv("UTF-8", "Windows-1251", $text);
 
Конечно, что то теряется но в 99,9 % случаев работает.

Всего записей: 2 | Зарегистр. 30-12-2007 | Отправлено: 17:50 31-12-2007
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vlad1778
www.php.net/mb_detect_encoding

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 07:04 01-01-2008
Andjey_les



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот неплохая менюшка (для роботы нужна база данных)

Цитата:
 
<?php
if(isset($_GET["page"]))
{
    $clickpage=$_GET["page"];
    $result=$mysql->query("SELECT * FROM `top_menu` WHERE `page`='$clickpage'");
    $link=$mysql->get($result,"link");
    $mysql->query("SELECT *FROM `top_menu` WHERE     `def` = 'alpha'");
 
}
else
{
    $result=$mysql->query("SELECT * FROM `top_menu` WHERE `def`='1'");
    if(mysql_num_rows($result))
    {
        $clickpage=$mysql->get($result,"page");
    }
    else
    {
        /*$result=$mysql->query("SELECT * FROM `top_menu` ORDER BY `menuid`");
        $clickpage=$mysql->get($result,"page");*/
    }
    
    $result=$mysql->query("SELECT * FROM `top_menu` WHERE `page`='$clickpage'");
    $link=$mysql->get($result,"link");
}
$description=$mysql->get($result,"description");
echo '
    <table width="100%" height="23" border="0" cellpadding="0"  cellspacing="0" style="background:#FFFFFF">
      <tr>
        <td width="25" nowrap class="menu_bor_bot"  valign="bottom"><img src="../index/leshost/menu_right_bg.gif" /></td>
    ';
$result=$mysql->query("SELECT * FROM `top_menu` ORDER BY `menuid`");
if(mysql_num_rows($result))
{
    $menuItemCount=mysql_num_rows($result);
    if($clickpage!=$mysql->get($result,"page"))
    {
        echo '
        <td nowrap class="menu_sep">&nbsp;</td>
        ';
    }
    
    for($i=0;$i<$menuItemCount;$i++)
    {
        if($mysql->get($result,"page",$i)==$clickpage)
        {
            echo '
            <td nowrap class="menu_sel_begin">&nbsp;</td>
            <td nowrap class="menu_sel_center">'.$mysql->get($result,"caption",$i).'</td>
            <td nowrap class="menu_sel_end">&nbsp;</td>
            ';
        }
        else
        {
            if($mysql->get($result,"newwindow",$i))
            {
                $target=' target="_blank"';
            }
            else
            {
                $target='';
            }
            if($mysql->get($result,"onlyinner",$i))
            {
                $href=$mysql->get($result,"link",$i);
            }
            else
            {
                $href='index.php?page='.$mysql->get($result,"page",$i).'&lang='.$lang.'';
            }
            echo '
            <td nowrap class="menu_off_center"><a style="color:#000000;" href="'.$href.'"'.$target.'>'.$mysql->get($result,"caption",$i).'</a></td>
            ';
            
            if($mysql->get($result,"page",$i+1)!=$clickpage)
            {
                echo '
                <td nowrap class="menu_sep">&nbsp;</td>
                ';
            }
        }
    }
}
else
{
    echo '<td nowrap class="menu_bor_bot">No menu</td>';
}
 
echo'<td width="100%" class="menu_bor_bot" align="right" valign="middle">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td height="20" align="right" valign="middle"></td>
  </tr>
</table>
       </td>
    <td width="100%" class="menu_bor_bot" align="right"><img src="../index/leshost/menu_left_bg.gif" /></td>
  </tr>
</table>
';
 
?>
 

 
А вот собственно таблица с которой работает скрипт:

Цитата:
 
CREATE TABLE `top_menu` (                                
            `menuid` int(10) NOT NULL default '0',                  
            `newsid` int(10) NOT NULL default '0',                  
            `page` varchar(50) NOT NULL,                            
            `caption` varchar(50) NOT NULL default 'noname',        
            `description` varchar(100) NOT NULL default '&nbsp;',  
            `newwindow` tinyint(1) NOT NULL default '0',            
            `def` tinyint(1) NOT NULL default '0',                  
            `onlyinner` tinyint(1) NOT NULL default '0',            
            `link` varchar(200) NOT NULL default 'about:blank'      
          ) ENGINE=MyISAM DEFAULT CHARSET=utf8
 

 
 
Добавлено:
Вот неплохая функция для создания thumb-ов
 

Код:
function make_thumb($fold, $file, $trumb_size_y)
{
    $jpg_quality = 100;
    echo $fold.$file;
    if(file_exists($fold.$file))
    {
    $size = getimagesize($fold.$file);
    $b=imagecreatefromjpeg($fold.$file);            
    $t=imagecreatetruecolor(($trumb_size_y)*($size[0]/$size[1]),$trumb_size_y);
    imagecopyresized($t,$b,0,0,0,0,($trumb_size_y)*($size[0]/$size[1]),$trumb_size_y,$size[0],$size[1]);
    
    if(eregi(".jpg$|.jpeg$",$file))     imagejpeg($t,$fold."thumb/".$file,$jpg_quality);
    if(eregi(".gif$",$file))         imagegif($t,$fold."thumb/".$file);
    if(eregi(".png$",$file))         imagepng($t,$fold."thumb/".$file);
        
 
    $trumb_size_y = 300;
    $t=imagecreatetruecolor(($trumb_size_y)*($size[0]/$size[1]),$trumb_size_y);
    imagecopyresized($t,$b,0,0,0,0,($trumb_size_y)*($size[0]/$size[1]),$trumb_size_y,$size[0],$size[1]);
    if(eregi(".jpg$|.jpeg$",$file))     imagejpeg($t,$fold."zoom/".$file,$jpg_quality);
    if(eregi(".gif$",$file))         imagegif($t,$fold."zoom/".$file);
    if(eregi(".png$",$file))         imagepng($t,$fold."zoom/".$file);
    }
}

 
И функция для сохранения файла на диске
 

Код:
function save_file($fold, $tmp_file, $file, $size) {
        $max_file_size = $size;
        $file = strtolower($file);
        $file = str_replace(' ', '_', $file);
        $file = str_replace('$', '_', $file);
 
        $at = "$fold".$file."";  
            if(file_exists($at))  unlink($at);  
 
        $file_size = $size;
            if($file_size > $max_file_size)    {
                die ("Файл має занадто великий розмір");
            }
 
            if ($img_name != "") {
                copy($tmp_file, $fold.$file)  
                or  die("Неможливо скопіювати файл. Можливо ви не маєте прав на запис у дану папку");  
            }  
        return $file;
}

Всего записей: 17 | Зарегистр. 04-05-2007 | Отправлено: 19:38 03-01-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот подумал у многих была такая ситуация, когда есть большой проект и файлы включаются с разных мест, будущее положение проекта на сервере (каталога) не известно. Что делать если у вас допустим часть движка включает константы вот так:

Код:
require_once '../engine/constants.php';

кроме того что простой поиск файлов сменит исходную директорию, также включение этого модуля (если включение делает скрипт в другой директории), даст ошибку, так как относительный путь к constants.php будет не верным. Вот почему я советую всем делать вот так:

Код:
chdir(dirname(__FILE__));
require_once '../engine/constants.php';

и проблема решена, с виду просто но думаю очень удобно

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 02:30 06-01-2008 | Исправлено: Delphi6, 02:32 06-01-2008
Cheery



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

Цитата:
и проблема решена, с виду просто но думаю очень удобно

вот только лучше сохранить пред. диру через  
$d=getcwd();
и потом к ней вернуться
ps: исправил ошибку в названии

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:18 06-01-2008 | Исправлено: Cheery, 21:43 06-01-2008
Delphi6



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

Цитата:
вот только лучше сохранить пред. диру через  
$d=cwd();
и потом к ней вернуться

Правильно замечание, спасибо! Добавлю во все свои скрипты ...

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 21:38 06-01-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот еще сегодня вспомнил про конструкцию FOR о которой многие просто забывают (в том числе и я ) но на самом деле FOR цикл в РНР очень гибкий, вот допустим надо перебрать элементы массива, можно было банально инициализировать переменную счетчика вот так

Код:
$i = 1;
while (isset($settings['question'.$i])) {
  // делаем разные вещи
  $i += 1;
}

но потом вспомнил что такие конструкции красивей реализовывать через FOR а именно

Код:
for ($i=1; isset($settings['question'.$i]); $i++) {
  // делаем разные вещи
}

во первых на две строчки меньше (которые просто перегружают глаз) а во вторых наглядно видно что у нас здесь перебор с шагом в один и ничего не пропущено (вроде $i += 1;)
 
так что если кто не обращал внимания на возможности FOR, то стоит сделать это сейчас на сайте php.net

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 23:18 12-01-2008 | Исправлено: Delphi6, 23:19 12-01-2008
Cheery



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

Цитата:
$i = 0;
while (isset($settings['question'.(++$i)])) {
  // делаем разные вещи
 
}



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:21 12-01-2008
Delphi6



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

Цитата:
$i = 0;
while (isset($settings['question'.(++$i)])) {
  // делаем разные вещи
}

Зачетно, это действительно уменьшение кода до нельзя Хотя я не совсем хорошо передал всю суть, я хотел указать на то что в РНР FOR цикл имеет не обязательно шаг в один и не обязательно что бы было просто:

Код:
for ($i=1; $i<=10; $i++) {
}

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

Код:
for ($i=1, $k=20, $s=7; ($j != false)and($s = 10); $j +=3, $k *= 3) {
}

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 09:17 13-01-2008 | Исправлено: Delphi6, 09:19 13-01-2008
MaxIkar



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6
Название топика (читаем вдумчиво): PHP: Полезные (интересные и оригинальные) решения

Цитата:
 
Код:
for ($i=1, $k=20, $s=7; ($j != false)and($s = 10); $j +=3, $k *= 3) {
}  

 
...а это даже не решение

Всего записей: 226 | Зарегистр. 04-06-2006 | Отправлено: 21:04 13-01-2008
Delphi6



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

Цитата:
а это даже не решение

Ржал очень долго, не перевелись на нашем форуме люди с острым умом
 
Ну а нас счет комента:
 
1) п. 2.16. главы VIII Соглашения по использованию
 
2) надо читать не только последний пост

Цитата:
так что если кто не обращал внимания на возможности FOR, то стоит сделать это сейчас на сайте php.net  

3) Понятие слов "полезные, интересные и оригинальные" является очень растяжимым, если мой пост не является для вас (вы например с пеленок только на TASM-е кодите) новостью можете просто игнорировать, это ваще право. Форум посещает очень много людей (в том числе и начинающих, каковым был и я) которые не находятся на таком ВЫСОКОМ уровне в программировании как вы.

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 22:23 13-01-2008 | Исправлено: Delphi6, 22:31 13-01-2008
JonJonson



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

Цитата:
for ($i=1; isset($settings['question'.$i]); $i++) {
  // делаем разные вещи
}

вырвано из контекста, а потому фигня.
Насчёт же проще...

Цитата:
 
foreach ($settings as $key => $setting) {
  // делаем с $setting разные вещи
}
 


Всего записей: 135 | Зарегистр. 22-05-2004 | Отправлено: 10:11 14-01-2008 | Исправлено: JonJonson, 10:13 14-01-2008
MaxIkar



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

Цитата:
Цитата:
а это даже не решение
 
Ржал очень долго, не перевелись на нашем форуме люди с острым умом  

 
Название темы, если вы не заметили, весьма простое и однозначное: PHP: Полезные (интересные и оригинальные) решения.
 
Именно поэтому я и сказал насчет того, что это даже не решение.
 

Цитата:
Ну а нас счет комента:
 
1) п. 2.16. главы VIII Соглашения по использованию  

Модерированием не занимаюсь, просто высказываю свое мнение. И если хотя бы одно слово в моем посте вам кажется неверным по отношению к нему, то скажите - какое.
 

Цитата:
2) надо читать не только последний пост
 

 
Полностью согласен, потому читаем шапку:

Цитата:
Тема именно для уникальных, оригинальных и красивых решений. Если ты только взялся изучать php - не стоит сюда писать, так как, заведомо, у тебя не будет такого решения
 
ps: выделил специально для тех, у кого проблемы со зрением.
 

 

Цитата:
Форум посещает очень много людей (в том числе и начинающих, каковым был и я) которые не находятся на таком ВЫСОКОМ уровне в программировании как вы.

 
Я нигде не упомянул ни словом о том, что я на высоком уровне, но - уж извините - обсуждать конструкции языка в теме оригинальных решений... Для начала хотя бы скачать мануал с комментами с php.net
 
А эта тема именно для поиска решений
 
Сорри за оффтоп, предлагаю продолжать в ПМ

Всего записей: 226 | Зарегистр. 04-06-2006 | Отправлено: 20:26 14-01-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2All
Дальнейшие "претензии" только в ПМ!

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 20:42 14-01-2008
Ternik



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
предлагаю полезное решение для всех проблем по e-mail. имеется возможность встраивать в код письма ресурсы, которые вытаскиваются в последствиии по CID идентификатору. Все просто, функции не подписанные черточкой можно использовать из экземпляра класса, все остальное на ваш страх и риск. Все очевидно, attach (возвращает CID прикрепленного ресурса), to, from, send, addtext - разберетесь по ходу, destroy - разрушает данные экземпляра.

Код:
 
<?php
class mailer
{
    //
    var $charset = "windows-1251";
    //
    var $type;
    //
    var $header;
    //
    var $attach = array();
    //
    var $subject;
    //
    var $message;
    //
    var $messagetype = 'text/plain';
    //
    var $boundary;
    //
    var $from;
    //
    var $to = array();
    //
    function mailer()
    {
         
    }
    function destroy()
    {
        $this->subject     = '';
        $this->message     = '';
        $this->header    = '';
        $this->boundary = false;
        $this->to        = array();
        $this->attach    = array();
        ini_restore('sendmail_from');
    }    
    //
    function attach($filename)
    {
        if(!$this->boundary) $this->boundary = "_".md5(uniqid(rand(), true));
         
        $contentid = "@".md5(uniqid(rand(), true));
             
        if(($handle = fopen($filename, "r") or die("Failed open stream")))
        {
            $filenamemsg = preg_replace("/^(.*)[\/\\\](.*)$/","$2",$filename);        
            $this->attach[] = "--".$this->boundary."\r\nContent-Type: ".$this->_getfiletype($filename)."; name=\"".$filenamemsg."\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment; filename=\"".$filenamemsg."\"\r\nContent-ID: <".$contentid.">\r\n\r\n".chunk_split(base64_encode(fread($handle, filesize($filename))));
            return $contentid;
        }
        return false;
    }
    //
    function addtext($string)
    {
        return($this->message .= $string);
    }
    //
    function from($string)
    {
        $this->from = $string;
        return(ini_set("sendmail_from",$string));
    }
    //
    function _header($type = 'text/plain')
    {
        $this->header .= "From: ". $this->from ."\r\n";
        $this->header .= "To: ". implode(", ",$this->to) ."\r\n";
        $this->header .= "Subject: ". $this->subject ."\r\n";
        $this->header .= "Date: ". date("r",time()) ."\r\n";
        $this->header .= "MIME-Version: 1.0\r\n";
        if($this->boundary)
        {
            $this->header .= "Content-Type: multipart/mixed;\r\n";
            $this->header .= "        boundary=\"".$this->boundary."\"\r\n";
        }
        else
        {
            $this->header .= "Content-Type: ".$this->messagetype."; charset=". $this->charset ."\r\n";
        }
        $this->header .= "X-Mailer: PHP/". phpversion();
        $this->header .= "\r\n\r\n";
    }
    //
    function to($string)
    {
        return($this->to[] = $string);
    }
    //
    function subject($string)
    {
        return($this->subject = $string);
    }
    //
    function send()
    {
        if(count($this->to) > 0)
        {
            $this->_header();
            $to = implode(",",$this->to);
            if(count($this->attach) > 0)
            {
                array_unshift($this->attach,"--".$this->boundary."\r\nContent-type: ".$this->messagetype.";\r\ncharset=\"".$this->charset."\"\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\n".$this->message);
                     
                $message = '';
                     
                foreach($this->attach as $item)
                {
                    $message.= $item."\r\n";
                }
                $message.= "--".$this->boundary;
                echo $this->header.($message);
                //Enchanced Mail()
                if($this->enchance != false and is_int($this->enchance))
                {
                    //Not workin' yet
                }
                else
                {
                    $this->enchance = false;
                    return mail($to, $this->subject, ($message), $this->header);
                }
            }
            else
            {
                return mail($to, $this->subject, wordwrap($this->message,70), $this->header);
            }
        }
        return false;
    }
    function _getfiletype($filename)
    {
        require("mimes.php");
         
        if(preg_match("/^(.*)\.(.*)$/",$filename,$match))
        {
            if(isset($_MIMES[$match[2]]))
            {
                return $_MIMES[$match[2]];
            }
            else
            {
                return 'application/octet-stream';
            }
        }
        else
        {
            return false;
        }
    }
}
 
?>
 

ах, совсем забыл =) mimes.php

Код:
 
<?php  
#Ничего кроме =) $_MIMES
global $_MIMES;
$_MIMES = array (
  'ez' => 'application/andrew-inset',
  'atom' => 'application/atom+xml',
  'hqx' => 'application/mac-binhex40',
  'cpt' => 'application/mac-compactpro',
  'mathml' => 'application/mathml+xml',
  'doc' => 'application/msword',
  'bin' => 'application/octet-stream',
  'dms' => 'application/octet-stream',
  'lha' => 'application/octet-stream',
  'lzh' => 'application/octet-stream',
  'exe' => 'application/octet-stream',
  'class' => 'application/octet-stream',
  'so' => 'application/octet-stream',
  'dll' => 'application/octet-stream',
  'oda' => 'application/oda',
  'ogg' => 'application/ogg',
  'pdf' => 'application/pdf',
  'ai' => 'application/postscript',
  'eps' => 'application/postscript',
  'rdf' => 'application/rdf+xml',
  'smi' => 'application/smil',
  'gram' => 'application/srgs',
  'grxml' => 'application/srgs+xml',
  'mif' => 'application/vnd.mif',
  'xls' => 'application/vnd.ms-excel',
  'ppt' => 'application/vnd.ms-powerpoint',
  'wbxml' => 'application/vnd.wap.wbxml',
  'wmlc' => 'application/vnd.wap.wmlc',
  'wmlsc' => 'application/vnd.wap.wmlscriptc',
  'vxml' => 'application/voicexml+xml',
  'bcpio' => 'application/x-bcpio',
  'vcd' => 'application/x-cdlink',
  'pgn' => 'application/x-chess-pgn',
  'cpio' => 'application/x-cpio',
  'csh' => 'application/x-csh',
  'dcr' => 'application/x-director',
  'dir' => 'application/x-director',
  'dvi' => 'application/x-dvi',
  'spl' => 'application/x-futuresplash',
  'gtar' => 'application/x-gtar',
  'gzip' => 'application/x-gzip',
  'hdf' => 'application/x-hdf',
  'js' => 'application/x-javascript',
  'skp' => 'application/x-koan',
  'skd' => 'application/x-koan',
  'skt' => 'application/x-koan',
  'latex' => 'application/x-latex',
  'nc' => 'application/x-netcdf',
  'sh' => 'application/x-sh',
  'shar' => 'application/x-shar',
  'swf' => 'application/x-shockwave-flash',
  'sit' => 'application/x-stuffit',
  'sv4cpio' => 'application/x-sv4cpio',
  'sv4crc' => 'application/x-sv4crc',
  'tar' => 'application/x-tar',
  'tcl' => 'application/x-tcl',
  'tex' => 'application/x-tex',
  'texinfo' => 'application/x-texinfo',
  't' => 'application/x-troff',
  'tr' => 'application/x-troff',
  'man' => 'application/x-troff-man',
  'me' => 'application/x-troff-me',
  'ms' => 'application/x-troff-ms',
  'ustar' => 'application/x-ustar',
  'src' => 'application/x-wais-source',
  'xhtml' => 'application/xhtml+xml',
  'xslt' => 'application/xslt+xml',
  'xml' => 'text/xml',
  'dtd' => 'application/xml-dtd',
  'zip' => 'application/zip',
  'rar' => 'application/rar',
  'ace' => 'application/ace',
  'au' => 'audio/basic',
  'mid' => 'audio/midi',
  'midi' => 'audio/midi',
  'mpga' => 'audio/mpeg',
  'mp2' => 'audio/mpeg',
  'aif' => 'audio/x-aiff',
  'aiff' => 'audio/x-aiff',
  'm3u' => 'audio/x-mpegurl',
  'ram' => 'audio/x-pn-realaudio',
  'rm' => 'application/vnd.rn-realmedia',
  'wav' => 'audio/x-wav',
  'pdb' => 'chemical/x-pdb',
  'xyz' => 'chemical/x-xyz',
  'bmp' => 'image/bmp',
  'cgm' => 'image/cgm',
  'gif' => 'image/gif',
  'ief' => 'image/ief',
  'jpeg' => 'image/jpeg',
  'jpg' => 'image/jpeg',
  'png' => 'image/png',
  'svg' => 'image/svg+xml',
  'tiff' => 'image/tiff',
  'djvu' => 'image/vnd.djvu',
  'wbmp' => 'image/vnd.wap.wbmp',
  'ras' => 'image/x-cmu-raster',
  'ico' => 'image/x-icon',
  'pnm' => 'image/x-portable-anymap',
  'pbm' => 'image/x-portable-bitmap',
  'pgm' => 'image/x-portable-graymap',
  'ppm' => 'image/x-portable-pixmap',
  'rgb' => 'image/x-rgb',
  'xbm' => 'image/x-xbitmap',
  'xpm' => 'image/x-xpixmap',
  'xwd' => 'image/x-xwindowdump',
  'igs' => 'model/iges',
  'msh' => 'model/mesh',
  'mesh' => 'model/mesh',
  'wrl' => 'model/vrml',
  'ics' => 'text/calendar',
  'css' => 'text/css',
  'html' => 'text/html',
  'asc' => 'text/plain',
  'rtx' => 'text/richtext',
  'rtf' => 'text/rtf',
  'sgml' => 'text/sgml',
  'tsv' => 'text/tab-separated-values',
  'wml' => 'text/vnd.wap.wml',
  'wmls' => 'text/vnd.wap.wmlscript',
  'etx' => 'text/x-setext',
  'mpeg' => 'video/mpeg',
  'mpg' => 'video/mpeg',
  'qt' => 'video/quicktime',
  'mxu' => 'video/vnd.mpegurl',
  'avi' => 'video/x-msvideo',
  'movie' => 'video/x-sgi-movie',
  'ice' => 'x-conference/x-cooltalk',);
?>
 

Всего записей: 763 | Зарегистр. 25-09-2002 | Отправлено: 02:53 23-01-2008 | Исправлено: Ternik, 02:55 23-01-2008
Brodyaga



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

Цитата:
$this->_getfiletype($filename).


Цитата:
    function _getfiletype($filename)
    {
        require("mimes.php");  

Т.е. каждый аттач инициирует вызов mimes.php? Таки не совсем полезно.

----------
Damn Metal

Всего записей: 2713 | Зарегистр. 07-01-2006 | Отправлено: 13:12 26-01-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ternik
Спасибо действительно хороший класс, давно хотел увидеть на практике как реализуется прикрепление атачмента (мне правда мне на практике нужно сделать наоборот отделить атачмент). Вот только не пойму зачем у вас список MIME типов? ведь у РНР есть спец. функция для этих целей fileinfo()

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 22:19 13-02-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как лучше хранить несколько чисел в одном столбце. Если размер для вас имеет значение, вместо банального implode(':', $arrayOfInt) или serialize() воспользуйтесь для начала конвертацией каждого INT числа в 4 символьную строку а потом склейте. После можно разбить по четыре символа (str_split()) и коневернуть назад, так как битовые операции самый быстрые то все будет работать очень быстро (я на счет << и >> операций).
 

Код:
function IntToStr($value) {  
  $a1 = $value & 0xFF;
  $a2 = ($value >> 8) & 0xFF;
  $a3 = ($value >> 16) & 0xFF;
  $a4 = ($value >> 24) & 0xFF;
  return chr($a4).chr($a3).chr($a2).chr($a1);
}
 
function StrToInt($value) {
  $a1 = ord($value[3]);
  $a2 = ord($value[2]);
  $a3 = ord($value[1]);
  $a4 = ord($value[0]);
  return ($a4 << 24) | ($a3 << 16) | ($a2 << 8) | $a1;
}

 
п.с. Экономия на каждом числе по ~6 байтов + 1 байт на разделитель который нам не нужен, а если чисел 10? то ~70 байтов на одной строке, не трудно подсчитать что на 10К строк это ~700кб
 
Спасибо dacuan, оказалось функции для конвертации в бинарную строку уже есть нет ничего нового в этом мире, все уже давно изобрели до нас pack() и unpack()

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 13:30 16-03-2008 | Исправлено: Delphi6, 17:12 19-03-2008
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Потребовался механизм загрузки картинок из Маркет.Яндекс продукции.
Насколько это хорошо или плохо я вдаваться не стал, но нижеперечисленный код вроде работает.
Полный код с примерами.

----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 16:57 19-03-2008 | Исправлено: 6epcepk, 16:59 19-03-2008
TERROR666

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ГЕНЕРАТОР ПАРОЛЕЙ  
$length - длина пароля  
$dig    - использовать ли цифры (по умолчанию - да)  
$lchar  - использовать ли латинские буквы (по умолчанию - да)  
$rchar  - использовать ли русские буквы  
$symb   - использовать ли дополнительные символы и какие  
 
 
Код:  
function generate_password($length,$dig=1,$lchar=1,$rchar=0,$symb=''){  
    $dig=array(0,1,2,3,4,5,6,7,8,9);  
    $rus=array(  
    "а","б","в","г","д","е","ж","з","и","к",  
    "л","м","н","о","п","р","с","т","у","ф",  
    "х","ц","ч","ш","щ","ь","ы","ъ","э","ю",  
    "я","ё","й");  
    $for=array(  
    "a","b","c","d","e","f","g","h","j","k",  
    "l","m","n","o","p","q","r","s","t","u",  
    "v","w","x","y","z");  
    $main=array();  
    $dig?$main=array_merge($main,$dig):true;  
    $rchar?$main=array_merge($main,$rus):true;  
    $lchar?$main=array_merge($main,$for):true;  
    !empty($symb)?$main=array_merge($main,explode(' ',$symb)):true;  
    shuffle($main);  
    return $pass=substr(implode('',$main),0,$length);  
}

Всего записей: 16 | Зарегистр. 26-11-2006 | Отправлено: 00:17 14-04-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот решил поделиться куском кода который украшает программу (повышает читабельность):

Код:
function TrimLine($line) {
  return trim($line);
}
 
$fileLines = file('./input.txt');
var_dump(array_map('TrimLine', $fileLines));

часто бывает что надо считать данные из файла не однократно и убрать все переносы строк или пробелы с начала или конца каждой строки. Что бы не делать банально каждый раз foreach + trim можно воспользоваться вот такой конструкцией.
 
п.с. замечание особо одаренным, которые родились с книгой РНР5 в руках, этот код не для вас. Я перед вами склоняю голову и приношу свои извинения что оскорбил ваш взор своим банальным кодом
 
Добавлено:
Офигеть! Не перестает удивлять меня РНР

Цитата:
$dig?$main=array_merge($main,$dig):true;

как я понимаю это аналог

Код:
list($dig, $main) = array(array_merge($main,$dig), true);

п.с. пусть еще потом знатоки Perl говорят что РНР не гибкий язык программирования

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 06:11 16-04-2008
Cheery



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

Цитата:
function TrimLine($line)

зачем еще функцию какую то создавать? почему бы
Цитата:
array_map

не скормить оригинальную?  
 

Цитата:
как я понимаю это аналог  

нет
это просто  
if ($dig)  $main=array_merge($main,$dig);

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 06:16 16-04-2008 | Исправлено: Cheery, 06:18 16-04-2008
Delphi6



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

Цитата:
зачем еще функцию какую то создавать? почему бы array_map не скормить оригинальную?

Как то не сообразил . Не раз замечаю что из за программирования начал по другому мыслить Правильный код будет выглядеть еще проще:

Код:
$fileLines = file('./input.txt');
var_dump(array_map('trim', $fileLines));

 
[DELETED]

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 08:19 16-04-2008 | Исправлено: Delphi6, 07:49 17-04-2008
zerkms

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

Цитата:
Значит синтаксис таков:  

нет, не таков
 

Цитата:
п.с. а где еще можно почитать о похожих констуркциях?

всё тут: http://www.php.net/manual/ru/language.operators.php
 
ps: оффтоп это всё

----------
tvfёdor - оперативно уведомляет о раздачах rutracker | Блог об иммиграции в Новую Зеландию

Всего записей: 387 | Зарегистр. 07-05-2004 | Отправлено: 08:40 16-04-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6
не будем флеймить, да?  
плюс код все равно нерабочий - есть ошибки.
например перекрытие $dig как аргумента и переменной внутри функции

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 18:34 16-04-2008
Delphi6



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Прошу прошения за флуд. Подумав немного сообразил что это тоже самое что:

Цитата:
[оператор] = [условие] ? [то что в случае true] : [то что в случае false];

здесь просто упущены [оператор] к которой присваивается значение и [то что в случае false], на его месте просто ture, что бы не нарушать синтаксис.
 
п.с. кстати это тоже можно расценивать как оригинальный способ использовать =?: конструкцию

Всего записей: 2631 | Зарегистр. 06-07-2004 | Отправлено: 19:00 16-04-2008 | Исправлено: Delphi6, 09:09 18-04-2008
JonJonson



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Delphi6, плохо вы смотрели там есть ссылка на http://www.php.net/manual/ru/language.operators.comparison.php
Да и ниже в таблице порядка выполнения операторов упоминается ?:

Всего записей: 135 | Зарегистр. 22-05-2004 | Отправлено: 06:00 17-04-2008
Ser5

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Гибкая проверка IP-адресов.

Всего записей: 2 | Зарегистр. 24-08-2007 | Отправлено: 23:46 20-04-2008
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Написана функция, позволяющая добавлять в начало числа нули (аналог unsigned zerofill в sql):
 

Код:
function unsigned_zerofill($number, $length) {
 
    if (strlen($number) > $length) return;
    
    for ($i = 10, $j = 1; ; $i *= 10, $j++) {
 
        if ($number < $i) return substr(pow(10, $length - $j), 1) . $number;
 
    }
 
}
 
unsigned_zerofill(13, 5); // --> 00013


----------
comming soon..

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 13:48 19-05-2008
andymc

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
6epcepk
Предлагаю более универсальный способ, который учитывает уже имеющиеся функции.

Код:
str_pad('13', 5, '0', STR_PAD_LEFT)
дополнить строку 13 слева нулями до длины 5.

Всего записей: 18 | Зарегистр. 21-09-2006 | Отправлено: 22:04 19-05-2008
rusneftesnab

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Хотелось - бы понять правильность кодов http://www.***.ru




Хотелось бы, чтобы читали правила и не занимались рекламой на форуме /Cheery/

Всего записей: 1 | Зарегистр. 20-05-2008 | Отправлено: 11:37 20-05-2008 | Исправлено: Cheery, 17:36 20-05-2008
romka777

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

Цитата:
6epcepk  
Предлагаю более универсальный способ, который учитывает уже имеющиеся функции.  
 
Код:str_pad('13', 5, '0', STR_PAD_LEFT)  
 
дополнить строку 13 слева нулями до длины 5.

 

Код:
sprintf("%05d", $str)

 
Добавлено:
Привести все элементы массива к int:

Код:
 
array_walk(&$array, create_function('&$value', 'settype($value, "int");'));
 

Всего записей: 94 | Зарегистр. 28-12-2005 | Отправлено: 13:03 20-05-2008
zerkms

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
romka777
$arr = array_map('intval', $arr);

----------
tvfёdor - оперативно уведомляет о раздачах rutracker | Блог об иммиграции в Новую Зеландию

Всего записей: 387 | Зарегистр. 07-05-2004 | Отправлено: 15:19 20-05-2008
vitcom2

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не помню откуда, но думаю кому нить пригодиться
 
 
СУММА ПРОПИСЬЮ
 
<?
// Функция парсирования триады
// $num - целое число от 0 до 999
// $words - массив, в котором элемент с индексом
// 0 - написание числа 1 (например - "один", "одна")
// 1 - написание числа 2 (аналогично)
// 2 - единицы в единственном числе им.падеже("рубль")
// 3 - единицы в единственном числе род.падеже("рубля")
// 4 - единицы во множественном числе им.падеже("рублей")
 
Function ParseTriad($num,$words)
{
$hundreds = array("",'сто','двести','триста','четыреста','пятьсот','шестьсот',
'семьсот','восемьсот','девятьсот');
$decads = array('двадцать','тридцать','сорок','пятьдесят','шестьдесят','семьдесят',
'восемьдесят','девяносто');
$fdecads = array('десять','одиннадцать','двенадцать','тринадцать','четырнадцать',
'пятнадцать','шестнадцать','семнадцать','восемнадцать','девятнадцать');
$ones = array("",$words[0],$words[1],'три','четыре','пять','шесть','семь','восемь','девять');
 
$result = "";
 
$h = floor($num / 100);
 
$result .= $hundreds[$h];
 
$d = floor(($num - $h * 100) / 10);
$c = ($num - $h * 100 - $d*10);
 
$result.=($result!="")?" ":"";
 
if ($d==1) {$result .= $fdecads[$c];}
else
{if ($d>1) $result .= $decads[$d-2] . " ";
$result .=$ones[$c];}
 
$result.=($result!="")?" ":"";
 
switch ($c)
{
case 1:
$result .= ($d!=1)?$words[2]:$words[4];
break;
case 2:
case 3:
case 4:
$result .= ($d!=1)?$words[3]:$words[4];
break;
default:
if ($num > 0)
{$result .= $words[4];}
}
return $result;
}
 
// Функция возвращает число прописью
// $num - любое целое число (в данной реализации до 10^12-1)
// $upcase - булев параметр, если тру, то строка с заглавной буквы
Function ParseSum($num,$upcase)
{
$md = floor($num/1e9);
$m = floor(($num - $md*1e9)/1e6);
$t = floor(($num - $md*1e9 - $m*1e6)/1e3);
$h = floor($num - $md*1e9 - $m*1e6 - $t*1e3);
 
$result = ParseTriad($md,array('один','два','миллиард','миллиарда','миллиардов'));
$result .=($result!="")?" ":"";
$result .= ParseTriad($m,array('один','два','миллион','миллиона','миллионов'));
$result .=($result!="")?" ":"";
$result .= ParseTriad($t,array('одна','две','тысяча','тысячи','тысяч'));
$result .=($result!="")?" ":"";
$result .= ParseTriad($h,array('один','два','рубль','рубля','рублей'));
 
$result = $upcase?ucfirst($result):$result;
return $result;
}
?>

Всего записей: 6 | Зарегистр. 27-06-2006 | Отправлено: 01:53 26-05-2008
grek912

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ подскажите пожалуйста.
Короче в скрипте прописана отправка сообщений на мыло через SMTP сервер простой командой mailto мне надо как то это переписать чтобы скрипт авторизировался на SMTP сервере и с него отправлял потому что хостинг не разрешает не авторизируясь отправлять. Заранее спасибо

Всего записей: 7 | Зарегистр. 13-06-2008 | Отправлено: 09:20 19-06-2008
MaxIkar



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
http://pear.php.net/package/Mail

Всего записей: 226 | Зарегистр. 04-06-2006 | Отправлено: 10:49 19-06-2008
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
grek912
MaxIkar
читаем шапку - здесь не раздел Вопрос/Ответ
 
grek912
пользуемся фильтром
Perl, PHP: отправка формы на e-mail
там же, наверняка, упомянут класс phpmailer, чтобы не возиться с pear

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 19:08 19-06-2008
screamdj

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Огромный респект за лин про проверку IP - очень нужно было

Всего записей: 1 | Зарегистр. 21-07-2008 | Отправлено: 18:14 21-07-2008
relates

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Кто-нибудь знает, как реализовать преобразование sql в xml?
Нашел способ с помощью пхп -  
http://www.ibm.com/developerworks/ru/library/x-query2xml/
Есть у кого, какие-нибудь другие предложения/идеи как это можно реализовать?





Учимся читать шапку /Cheery/

Всего записей: 6 | Зарегистр. 29-07-2008 | Отправлено: 16:36 29-07-2008 | Исправлено: Cheery, 19:27 29-07-2008
Oleg NT



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Озадачился тут недавно: как прочитать EXIF-данные из JPEG-файла?
 
В PHP заявлена функция read_exif_data(), но на нашем сервере она не работает (Вызов неопределенной функции).
 
Нашел название библиотеки: PHP JPEG Metadata Toolkit, которая, по заверению в описании, работает куда лучше, чем стандартная функция PHP (что, мол, стандартная не все теги определяет).
 
Сайт официальный закрылся, ссылок в интернете нигде не нашел. Выкачал через ed2k.
 
Вот ссылка на библиотеку:
http://rapidshare.com/files/149517614/PHP_JPEG_Metadata_Toolkit_1.11.zip.html
 
Документация прилагается, код хорошо откомментирован. Но в том виде библиотека, как есть, не совсем удобна для использования, поэтому, возможно, придется поковыряться в ней

Всего записей: 229 | Зарегистр. 09-06-2006 | Отправлено: 02:42 30-09-2008
Delta RuBoard



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

Код:
 
function show_pages($topic_select_num_rows, $topic_select_all_num_rows, $posts_per_page, $cat, $p)
{
    global $_GET;
    if (!empty($cat))
    {
        $cat = '&cat='.$cat;
    }
    if (!empty($_GET['act']))
    {
        $cat = '&act='.$_GET['act'];
    }
    $pages_num = ceil($topic_select_all_num_rows / $posts_per_page);
    $pages = '';
    $pages_show = '';
    if ($p > $pages_num)
    {
        $p = $pages_num;
    }
    if ($p < 3)
    {
        $left = $p - 1;
    }
    else  
    {
        $left = 2;
    }
    if ($p > ($pages_num-2))
    {
        $right = $pages_num - $p;
    }
    else  
    {
        $right = 2;
    }
    if ($p > 3)
    {
        $left_add = ' <a href=?p='.($p-3).$cat.' class=t_link style="border: 1px solid #000; background-color:#f0f0f0; width: 20px;">&nbsp;&nbsp;…&nbsp;&nbsp;</a> ';
    }
    else  
    {
        $left_add = ' ';
    }
    if ($p < ($pages_num - 2))
    {
        $right_add = ' <a href=?p='.($p+3).$cat.' class=t_link style="border: 1px solid #000; background-color:#f0f0f0; width: 20px;">&nbsp;&nbsp;…&nbsp;&nbsp;</a> ';
    }
    else  
    {
        $right_add = ' ';
    }
    for ($i = $left; $i-->0;)
    {
        $pages_show .= '<a href=?p='.($p-$i-1).$cat.' class=t_link style="border: 1px solid #000; background-color:#f0f0f0; width: 20px;">&nbsp;&nbsp;'.($p-$i-1).'&nbsp;&nbsp;</a> ';
    }
    $pages_show .= '<span style="border: 1px solid #000; background-color:#e0e0e0; width: 20px;">&nbsp;&nbsp;'.$p.'&nbsp;&nbsp;</span>';
    for ($i = 0; $i++<$right;)
    {
        $pages_show .= ' <a href=?p='.($p+$i).$cat.' class=t_link style="border: 1px solid #000; background-color:#f0f0f0; width: 20px;">&nbsp;&nbsp;'.($p+$i).'&nbsp;&nbsp;</a> ';
    }
    $pages .= '<a href=?p=1'.$cat.' class=t_link style="border: 1px solid #000; background-color:#f0f0f0; width: 20 px;">&nbsp;&nbsp;«&nbsp;&nbsp;</a> ';
    if ($p > 1)
    {  
        $pages .= '<a href=?p='.($p-1).$cat.' class=t_link style="border: 1px solid #000; background-color:#f0f0f0; width: 20 px;">&nbsp;&nbsp;‹&nbsp;&nbsp;</a> ';
    }
    $pages .= $left_add.$pages_show.$right_add;
    if ($p < $pages_num)
    {
        $pages .= ' <a href=?p='.($p+1).$cat.' class=t_link style="border: 1px solid #000; background-color:#f0f0f0; width: 20 px;">&nbsp;&nbsp;›&nbsp;&nbsp;</a>';
    }
    $pages .= ' <a href=?p='.$pages_num.$cat.' class=t_link style="border: 1px solid #000; background-color:#f0f0f0; width: 20 px;">&nbsp;&nbsp;»&nbsp;&nbsp;</a> ';
    $pages .= '<br><br>';
    return $pages;
}
 

 
вот моя разбивка на страници. похоже на IPB'шную
 
входящий параметр $cat можно удалить

----------
мой маленький блог
Создание on-line игр

Всего записей: 382 | Зарегистр. 21-06-2005 | Отправлено: 21:44 03-10-2008
STAFT

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо за ваши Сообщении! Буду часто заходить!
 
***.Cx0.ru




Проходите мимо, не задерживайтесь /Cheery/

Всего записей: 3 | Зарегистр. 13-10-2008 | Отправлено: 08:41 14-10-2008 | Исправлено: Cheery, 16:57 14-10-2008
SvMn

Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
А как сделать php код скрыть/Развернуть ??




Читаем внимательно шапку и название темы /Cheery/

Всего записей: 6 | Зарегистр. 21-12-2005 | Отправлено: 18:21 14-10-2008 | Исправлено: Cheery, 20:28 14-10-2008
nomerdoma

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сайт о недвижимостиp
как раскрутить сайт?
 
Добавлено:
визитки
,




А не пойти бы вам погулять? /Cheery/

Всего записей: 1 | Зарегистр. 15-10-2008 | Отправлено: 11:34 15-10-2008 | Исправлено: Cheery, 18:16 15-10-2008
klyopsanya

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здраствуйте!!
У меня такая проблема  





Читать научитесь сначала /Cheery/

Всего записей: 1 | Зарегистр. 19-10-2008 | Отправлено: 16:29 19-10-2008 | Исправлено: Cheery, 20:21 19-10-2008
lucywave

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет! У меня такой вопрос. Как сделать расхлоп графиков, как на http://www.***.ru То есть, чтобы при нажатии весь фон затемнялся, а в центре был расхлопнутый график.




Вам отдельно указать на шапку?? /Cheery/

Всего записей: 2 | Зарегистр. 12-09-2007 | Отправлено: 01:25 21-10-2008 | Исправлено: Cheery, 01:26 21-10-2008
ofj

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





В очередь к окулисту, блин /Cheery/

Всего записей: 233 | Зарегистр. 13-10-2008 | Отправлено: 08:42 24-10-2008 | Исправлено: Cheery, 18:59 24-10-2008
ofj

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Памогите, такая проблема: ссылки должны стать актикными в течение определенного времени




Вы терпение модератора испытываете или проблемы с прочтением того, что сказано в шапке? Создайте тему и задайте там свой вопрос.
ps: терпение модератора уже на исходе /Cheery/

Всего записей: 233 | Зарегистр. 13-10-2008 | Отправлено: 12:50 28-10-2008 | Исправлено: Cheery, 18:05 28-10-2008
Alvein

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Использование бит в повседневной жизни (например для хранения данных выбора нескольких значений из небольших списков)
 
Предположим у нас есть 5-ть <input type="checkbox" name="nameinp[ind]" />
где, ind - числовой идентификатор поля.
 
для получения маски выбранных значений можно использовать код:
 

Код:
 
<?php
$nameinp = $_REQUEST['nameinp'];
 
foreach ($nameinp as $key => $val)
    $un = $un ^ pow(2,intval($v));
?>
 

 
дальше это число можно хранить в БД..
 
теперь как считывать.. Тут все просто.. если нам необходимо проверить, входит ли выбранное нами значение в то самое уникальное число, используем в запросе:
 

Код:
 
$sql = "SELECT * FROM `table` WHERE `unfield` & ".pow(2, ind);
 

где ind - это числовой идентификатор нужного нам поля (понятно из списка, что в самом начале поста)
 
если же нам нужно показать пользователю что он выбрал из этих пяти инпутов, то пользуемся кодом:

Код:
 
  foreach($lst as $key => $val ){
    print "<input type='checkbox' ".(( pow(2,$key) & $select )?" checked":"")."/>";
  }
 

где $lst - массив с нашим списком
 
Приятного использования
Лишь напомню то, что не стоит забывать о том, что у нас степень двойки и если значения очень большие, то хранить в полях с соответствующими типами данных, например BIGINT

Всего записей: 55 | Зарегистр. 21-09-2008 | Отправлено: 14:52 21-11-2008
sandyANF



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Требуется на страничку вывести данные, относящиеся к определенному периоду. Для этого пользователю нужно ввести сам этот период с такого-то числа по такое-то. Можно сделать форму с 6-ю полями ввода (день, месяц и год для начала и окончания периода), но на мой взгляд гораздо красивее, если будет одна строчка и пользователь сам укажет тот период, который ему будет необходим.
 
Функция парсит период, введенный в формате [ДД][.ММ][.ГГ[ГГ]] [- [ДД][.ММ][.ГГ[ГГ]]]
Если указана дата только начала, то окончание принимается та же дата.
Если ничего не указано, то за период принимается текущее число.
Если указан только месяц (например так: .10), то период принимается от начала указанного месяца до его окончания. То же и с годом.
 
Возвращается массив, состоящий из двух значений: дата начала и дата окончания периода. На входе функции - строка, введенная пользователем.
 

Код:
//Возвращает дату начала и дату окончания, полученные из строки.
//$_period - это строка типа "ДД.ММ.ГГГГ - ДД.ММ.ГГГГ"
function period_parser($_period) {
    $st = str_replace(" ", "", $_period);
    $st = str_replace(",", ".", $st);
    $ar = explode('-', $st,2);
    list($d1,$m1,$y1) = explode('.', $ar[0],3);
    list($d2,$m2,$y2) = explode('.', $ar[1],3);
    if ($d1==0&&$m1==0&&$y1==0&&$d2==0&&$m2==0&&$y2==0) {$d1 = date("d");$m1 = date("m");$y1 = date("Y");$d2 = date("d");$m2 = date("m");$y2 = date("Y");}
    if ($m1==0&&$m2==0&&$d1==0) {$m1=1;$m2=12;}
    if ($m1==0) {$m1=date("m");}
    if ($m2==0) {$m2=$m1;}
    if ($y1==0) $y1 = date("Y");
    if ($y2==0) $y2 = $y1;
    if ($d1==0&&$d2==0) {$d1=1;$d2=date("d",mktime(0,0,0,$m1+1,0,$y));}
    if ($d1==0) {$d1 = date("d");}
    if ($d2==0) {$d2 = $d1;}
    return array(mktime(0,0,0,$m1,$d1,$y1),mktime(0,0,0,$m2,$d2,$y2));
}

 
У меня к полю ввода периода прикручен java-скрипт с календарем из Yahoo! User Interface Library. Таким образом, можно выбирать период как вручную, так и кнопочкой.

Всего записей: 9 | Зарегистр. 22-09-2005 | Отправлено: 12:26 28-11-2008
sandyANF



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возвращает ФИО в сокращенном виде. Т.е. на входе, например, "Иванов Петр Сергеевич", а на выходе "Иванов П.С."

Код:
//Возвращает строку вида "Фамилия И.О." в ответ на полные ФИО
function fio($st) {
    $ar='';
    preg_match_all ('/\S+/', $st, $ar);
    $f = $ar[0][0];
    $i = strlen($ar[0][1])>0 ? (substr ($ar[0][1], 0 ,1).'.') : '';
    $o = strlen($ar[0][2])>0 ? (substr ($ar[0][2], 0 ,1).'.') : '';
    return $f.' '.$i.$o;
}
 

Всего записей: 9 | Зарегистр. 22-09-2005 | Отправлено: 15:05 03-12-2008
coolkatala

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ofj Это можно реализовать с помощью javascript.
 
Допустим у тебя есть слово которое потом станет ссылкой <font id=link> Ссылка </font>
ставишь функцию  
 
window.onload = setTimeOut("make_link()",5000); // 5 sec
function make_link(){
 
  document.getElementById("link").innerHTML = "<a href='http://asdfa.com/' > Ссылка </a>";
 
}
 
________________________________________________
http://***.ru/ - искуство HTML, CSS, AJAX, PHP, PS design





Плохо понимаем, что тут не рекламная площадка? третьего предупреждения не будет - будет бан /Cheery/

Всего записей: 8 | Зарегистр. 03-12-2008 | Отправлено: 12:45 04-12-2008 | Исправлено: Cheery, 18:53 04-12-2008
zgonnik

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




Будете флеймить по форуму - схлопочите бан /Cheery/

Всего записей: 16 | Зарегистр. 08-10-2008 | Отправлено: 10:39 05-12-2008 | Исправлено: Cheery, 19:22 05-12-2008
IFKey



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Иногда бывает нужно перевести первый символ в большой или маленький регистр или даже весь текст, но стандартные методы не всегда работают, в решении проблемы Вам помогут две эти функции:

Цитата:
# параметры функции: текст, количество символов начиная с первого
function strtolower_ru($text,$count=false) {
    $alfavitlover = array('ё','й','ц','у','к','е','н','г', 'ш','щ','з','х','ъ','ф','ы','в', 'а','п','р','о','л','д','ж','э', 'я','ч','с','м','и','т','ь','б','ю');
    $alfavitupper = array('Ё','Й','Ц','У','К','Е','Н','Г', 'Ш','Щ','З','Х','Ъ','Ф','Ы','В', 'А','П','Р','О','Л','Д','Ж','Э', 'Я','Ч','С','М','И','Т','Ь','Б','Ю');
   if ($count!=false){
     return str_replace($alfavitupper,$alfavitlover,strtolower($text));
   } else {
     $text[$count] = str_replace($alfavitupper,$alfavitlover,strtolower($text[$count]));
     return $text;
   }
}
 
function strtoupper_ru($text,$count=false) {
    $alfavitlover = array('ё','й','ц','у','к','е','н','г', 'ш','щ','з','х','ъ','ф','ы','в', 'а','п','р','о','л','д','ж','э', 'я','ч','с','м','и','т','ь','б','ю');
    $alfavitupper = array('Ё','Й','Ц','У','К','Е','Н','Г', 'Ш','Щ','З','Х','Ъ','Ф','Ы','В', 'А','П','Р','О','Л','Д','Ж','Э', 'Я','Ч','С','М','И','Т','Ь','Б','Ю');
   if ($count!=false){
     return str_replace($alfavitlover,$alfavitupper,strtoupper($text));  
   } else {
     $text[$count] = str_replace($alfavitlover,$alfavitupper,strtoupper($text[$count]));
     return $text;
   }
}
print strtolower_ru("Привет",0); // Результат: привет
print strtoupper_ru("привет",0);  // Результат: Привет

Всего записей: 331 | Зарегистр. 20-03-2007 | Отправлено: 10:46 10-12-2008 | Исправлено: IFKey, 10:49 10-12-2008
kiloptus

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IFKey, что мешает вместо ($count!=false) использовать ($count)? На мой взгляд, красивше.
 
Плюс setlocale() в большинстве случаев выручает.
 
P.S. Пролистал мельком тему... предлагаю скинуться уважаемому Cheery на корвалол обсуждение в ПС

Всего записей: 5 | Зарегистр. 16-12-2008 | Отправлено: 18:15 16-12-2008 | Исправлено: kiloptus, 18:32 16-12-2008
mouser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как закодировать HTML строку чтоб не было видно в SOURCE коде когда страница уже загрузилась... нужно сделать на сайте с движком DLE




Сначала обратиться к окулисту, затем прочитать шапку темы /Cheery/

Всего записей: 800 | Зарегистр. 10-11-2006 | Отправлено: 12:45 19-12-2008 | Исправлено: Cheery, 16:25 19-12-2008
spbalex777

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Требуется PHP программист для компании in-joy.Вакансии по адресу http://www.***.ru




К окулисту заходили? /Cheery/
Работа для веб-мастера (объявления от РАБОТОДАТЕЛЕЙ)

Всего записей: 2 | Зарегистр. 29-01-2009 | Отправлено: 14:42 29-01-2009 | Исправлено: Cheery, 00:01 30-01-2009
WEBMASTERR

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Создание сайтов под заказ и все для сайта - http://***.net




Будете спамить - забаним оба ника /Cheery/

Всего записей: 2 | Зарегистр. 09-02-2009 | Отправлено: 23:48 09-02-2009 | Исправлено: Cheery, 01:59 10-02-2009
Le Droy

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

Цитата:
# параметры функции: текст, количество символов начиная с первого
function strtolower_ru($text,$count=false) {
    $alfavitlover = array('ё','й','ц','у','к','е','н','г', 'ш','щ','з','х','ъ','ф','ы','в', 'а','п','р','о','л','д','ж','э', 'я','ч','с','м','и','т','ь','б','ю');
    $alfavitupper = array('Ё','Й','Ц','У','К','Е','Н','Г', 'Ш','Щ','З','Х','Ъ','Ф','Ы','В', 'А','П','Р','О','Л','Д','Ж','Э', 'Я','Ч','С','М','И','Т','Ь','Б','Ю');
   if ($count!=false){
     return str_replace($alfavitupper,$alfavitlover,strtolower($text));
   } else {
     $text[$count] = str_replace($alfavitupper,$alfavitlover,strtolower($text[$count]));
     return $text;
   }
}
...
 

 
Поднимаю старое сообщение, но объясните, зачем такой, простите, изврат? Ведь существует функция ucfirst();

Всего записей: 23 | Зарегистр. 24-02-2009 | Отправлено: 19:22 24-02-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Le Droy

Цитата:
Поднимаю старое сообщение, но объясните, зачем такой, простите, изврат? Ведь существует функция ucfirst();

ucfirst поднимает только первую букву. код выше - произвольную, либо целиком.
 
 
 
В общем есть у меня кусок - считающий вес директории перебором файлов. Для маленьких директорий он, конечно же, работает быстро. Для большого числа - не очень. В общем переписал через консольные возможности (возможно, что не учел всех возможностей)

Код:
<?php
$userdir='.';
$start=microtime(true);
echo "Method#1: ".dsize($userdir)." Bytes<br>";
$end=microtime(true);
echo "Time:".($end-$start)." seconds<br>";  
$start=microtime(true);
echo "Method#2: ".getsize($userdir)." Bytes<br>";
$end=microtime(true);
echo "Time:".($end-$start)." seconds<br>";
 
function dsize($dir)
{
if (!file_exists($dir)||!is_dir($dir)) return -1;
$size=0;
if (eregi("Windows",$_ENV['OS']))
 {    
    $dirs=dirslist($dir);
    if(is_array($dirs))
     foreach($dirs as $d)
       $size+=dir_size($d);
    return $size;
 }
 else
 {
  $du = @popen('/usr/bin/du -sb ' . escapeshellarg($dir), 'r');  
  $result = fgets($du, 256); pclose($du);  
  list($result,) = explode("\t", $result);  
  return intval($result);  
 }
return 0;  
}
function dirslist($dir)
{
 $dir=str_replace('/','\\',$dir);
 $out=shell_exec("dir /AD /b /s ".escapeshellarg($dir));
 $dirs=split("[\n\r]+",$out);
 if (is_array($dirs)&&trim($dirs[count($dirs)-1])=='') array_pop($dirs);
 $dirs[]=$dir;
 return $dirs;
}
 
function dir_size($dir)
{
$dir=str_replace('/','\\',$dir);
$out=shell_exec("dir ".escapeshellarg($dir));
$out=preg_split('/[\n\r]+/',$out);
if (is_array($out)&&count($out)>2)
{
 preg_match('/([0-9,\.]+)\s+bytes/i',$out[count($out)-3],$bytes);
 if (isset($bytes[1])) return intval(str_replace(array(',','.'),'',$bytes[1]));
}
return 0;  
}
 
function getsize($path){
    if (!is_dir($path))
        return filesize($path);
    $size=0;
    foreach (scandir($path) as $file){
        if ($file=='.' or $file=='..')
            continue;
    $size+=getsize($path.'/'.$file);
  }
  return $size;
}
?>  

Результаты для небольших директорий (101 файл) :

Цитата:
Method#1: 586954 Bytes
Time:0.326451063156 seconds
Method#2: 586954 Bytes
Time:0.0679850578308 seconds

Что и следовало, конечно же (все под виндой).
Но вот для большого количества мелких файлов (6960 файлов, 26 поддиректорий):  

Цитата:
Method#1: 1872467391 Bytes
Time:3.764564991 seconds
Method#2: 1872467391 Bytes
Time:6.11785697937 seconds

почти в два раза быстрее
 
ps: можно, конечно же, еще модернизировать - не читать весь вывод в переменную под виндой, а только последние две строчки. В них размер и есть

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:19 27-02-2009 | Исправлено: Cheery, 00:42 27-02-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Для никсов те же файлы интереснее..

Цитата:
Method#1: 831488 Bytes
Time:0.00887012481689 seconds
Method#2: 586954 Bytes
Time:0.000932931900024 seconds

правда du, похоже, считает фактический размер на диске, а не только сумму файлов.
и для большого количества

Цитата:
Method#1: 1890906112 Bytes
Time:0.209075212479 seconds
Method#2: 1872467391 Bytes
Time:0.0663659572601 seconds

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

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:43 27-02-2009 | Исправлено: Cheery, 22:45 27-02-2009
kloha



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

Вот нашол такой скрипт для пинга .но мне надо чтобы пингавал все время с интервалом в пару минут .кто может подсказать как это сделать.




Читаем шапку! + Не дублируем вопросы в разных темах! /Cheery/

Всего записей: 4 | Зарегистр. 05-03-2009 | Отправлено: 11:45 08-03-2009 | Исправлено: Cheery, 18:20 08-03-2009
Blinda_J



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




А читать мы умеем??? /Cheery/

Всего записей: 364 | Зарегистр. 04-03-2007 | Отправлено: 22:45 12-03-2009 | Исправлено: Blinda_J, 16:41 13-03-2009
deman_ru

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ребят помогите советом, в php  я сравнительно недавно, можно сказать еще нуб...мне нужно получить доступ к БД под управлением сервера Firebird 1.5.
для соединения использую следующий код...
Fatal error: Call to undefined function ibase_pconnect() in ...





Но читать то мы умеем? Так прочитайте шапку, блин. /Cheery/

Всего записей: 96 | Зарегистр. 28-04-2008 | Отправлено: 22:26 12-04-2009 | Исправлено: Cheery, 22:27 12-04-2009
bleff_power



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Не хочет вводится string null, хотя другие значения работают нормально. Поле из таблицы не имеет атрибут NOT NULL. Вот исходник:





Да как же вы надоели - неужели поголовно посадили зрение? /Cheery/

Всего записей: 137 | Зарегистр. 05-08-2006 | Отправлено: 16:59 27-04-2009 | Исправлено: Cheery, 19:25 27-04-2009
evil63

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

Цитата:
 
Возвращает ФИО в сокращенном виде. Т.е. на входе, например, "Иванов Петр Сергеевич", а на выходе "Иванов П.С."  
 
Код:
//Возвращает строку вида "Фамилия И.О." в ответ на полные ФИО  
function fio($st) {  
    $ar='';  
    preg_match_all ('/\S+/', $st, $ar);  
    $f = $ar[0][0];  
    $i = strlen($ar[0][1])>0 ? (substr ($ar[0][1], 0 ,1).'.') : '';  
    $o = strlen($ar[0][2])>0 ? (substr ($ar[0][2], 0 ,1).'.') : '';  
    return $f.' '.$i.$o;  
}  

function fio($string)
{
    list($first, $second, $third) = explode(' ', $string);
    return $first.' '.$second[0].'.'.$third[0].'.';
}

Всего записей: 1 | Зарегистр. 08-06-2009 | Отправлено: 13:47 08-06-2009
koc



Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ничего особо сверхъестественного или оригинального, просто удобная (на мой взгляд) обертка для работы со строковыми функциями в виде статического класса. Скачать можно здесь
 
Там же и скрин того, что выведет файл example.php. Документации пока нет.
 
В project issues можно писать о найденных багах и предложенях.

Всего записей: 270 | Зарегистр. 04-03-2005 | Отправлено: 15:21 13-06-2009
Mars803



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




Читаем шапку /Cheery/

Всего записей: 52 | Зарегистр. 02-05-2009 | Отправлено: 20:06 28-07-2009 | Исправлено: Mars803, 20:07 28-07-2009
Scary Zet

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

Цитата:
Использование бит в повседневной жизни (например для хранения данных выбора нескольких значений из небольших списков)  
 
[...]
 
теперь как считывать.. Тут все просто.. если нам необходимо проверить, входит ли выбранное нами значение в то самое уникальное число, используем в запросе:
 
Код:  
$sql = "SELECT * FROM `table` WHERE `unfield` & ".pow(2, ind);

 
Ваш запрос к БД будет работать очень медленно, так как выборка будет произведена полным перебором строк таблицы. Не стоит так делать.

Всего записей: 3 | Зарегистр. 07-12-2005 | Отправлено: 20:02 08-08-2009
Noen



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Редирект 404 ошибки. (Error 404)
Классической проверкой было (то что предлагают на большинстве страниц в Интернете)

Код:
$f = @fopen($myFile, 'r');  
if (!empty($f)) {
   
  .....
 
} else {  
  header('Status: 404');
  header('HTTP/1.1 404 Not Found');
  exit;
}
 

В результате мы получаем пустую страницу с 404 заголовком. Ниже вариант который выводит 404 ошибку в "стандартном оформлении".

Код:
$f = @fopen($myFile, 'r');   //пытаемся открыть файл с данными
if (!$f) {
  header('Status: 404');
  header('HTTP/1.1 404 Not Found');
  $myFile='404.dat';  //открываем файл с данными об ошибке
  $f = @fopen($myFile, 'r');  
}  
 





зачем писать то, в чем вы неуверены? Ваш код недописан.

Всего записей: 159 | Зарегистр. 20-01-2004 | Отправлено: 11:59 04-09-2009 | Исправлено: Cheery, 16:44 04-09-2009
IFKey



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Недавно столкнулся с проблемой кодировок, это привело к появлению функции меняющей кодировку значений всего массива:
Цитата:
function iconv_arr($in,$out,$arr)
{
    foreach($arr as $key => $value)
    {
        if(is_array($value))
            $arr[$key]=iconv_arr($in,$out,$value);
        else
            $arr[$key]=iconv($in,$out,$value);
    }
    return $arr;
}

Пример работы:
Цитата:
iconv_arr("UTF-8","windows-1251",$arr);


Всего записей: 331 | Зарегистр. 20-03-2007 | Отправлено: 19:10 10-09-2009 | Исправлено: IFKey, 19:13 10-09-2009
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Собрал тут по кускам проверку валидности мыла..  
Работает и под Windows, но с версии выше 5.2  

Код:
 
define('return_email','noreply@domain');
function win_getmxrr($hostname, &$mxhosts, &$mxweight=false) {
    if (strtoupper(substr(PHP_OS, 0, 3)) != 'WIN') return;
    if (!is_array ($mxhosts) ) $mxhosts = array();
    if (empty($hostname)) return;
    $exec='nslookup -type=MX '.escapeshellarg($hostname);
    @exec($exec, $output);
    if (empty($output)) return;
    $i=-1;
    foreach ($output as $line) {
        $i++;
        if (preg_match("/^$hostname\tMX preference = ([0-9]+), mail exchanger = (.+)$/i", $line, $parts)) {
          $mxweight[$i] = trim($parts[1]);
          $mxhosts[$i] = trim($parts[2]);
        }
        if (preg_match('/responsible mail addr = (.+)$/i', $line, $parts)) {
          $mxweight[$i] = $i;
          $mxhosts[$i] = trim($parts[1]);
        }
    }
    return ($i!=-1);
}
 
// Define
if (!function_exists('getmxrr')) {
    function getmxrr($hostname, &$mxhosts, &$mxweight=false) {
        return win_getmxrr($hostname, $mxhosts, $mxweight);
    }
}
 
 
function verify_email($em,$connect=true)
{
$em=filter_var($em, FILTER_SANITIZE_EMAIL);
if(filter_var($em,FILTER_VALIDATE_EMAIL))  //email looks valid
 {
  if(!$connect) return true;
  list(,$domain)=split('@',$em);  
  getmxrr($domain, $mxhosts, $weights);
  if(!empty($mxhosts))  // there is at least one MX record
    {
     $lowest=array_keys($weights, min($weights));
     if(is_array($lowest))$lowest=$lowest[0];  
     $domain=$mxhosts[$lowest]; // MX server with lowest priority number
    }  
  // probe connection to the remote SMTP server
  $code = 0;
  $fp = @fsockopen($domain, 25, $errno, $errstr, 3);
  if ($fp)  {
        send_command($fp, 'HELO '.$_SERVER["HTTP_HOST"]);
        send_command($fp, 'MAIL FROM:<'.return_email.'>');
        $erg = send_command($fp, 'RCPT TO:<'.$em.'>');
        send_command($fp, 'QUIT');
        fclose($fp);
        $code = intval(substr($erg, 0, 3));
  }
  if ($code==250||$code==451) return true; //valid email address. 451 for greylisting - might be the correct one
  }
return false;  
}
 
function send_command($fp, $out){
  fwrite($fp, $out . "\r\n");
  return get_data($fp);
}
function get_data($fp){
  $s="";
  stream_set_timeout($fp, 2);
 
  for($i=0;$i<2;$i++)
    $s.=fgets($fp, 1024);
 
  return $s;
}

verify_email('мыло',connect);
connect - true (по умолчанию) пытается подключиться к удаленному smtp и проверить мыло после проверки его валидности
            - false не подключается, а только проверяет валидность
возвращает true или false


----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:21 20-10-2009 | Исправлено: Cheery, 23:35 22-10-2009
OlegKor

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую всех!
не знаю на счет интересности и оригинальности, но вот буквально вчера "кровь из носу" понадобилось склонение ФИО в дательный падеж ... И по Инету ничего толком не нашел. Пришлось написать самостоятельно...
 
Предлагаю Вашему вниманию три функции (Для Фамилии, Имени и Отчества отдельно) И еще одно замечание, делалось мной для украинского языка (но я думаю для русского не сложно будет подправить)
 
Фамилия в Дательном падеже
 

Код:
// Фамилия в Дательном падеже
function padezSurname ($surname, $sex = 0){
 
$result = '';
 
    $l = mb_substr(trim($surname),-1,1,"utf-8");
 
    if($sex == 1) { // Если Пол мужской = 1
        switch ($l)
        {
            case 'о': case 'и': case 'я':  case 'а':
                $result = $surname;
                break;
 
            case 'й':
                $len = mb_strlen($surname,"utf-8")-2;
                $result =mb_substr(trim($surname), 0,$len ,"utf-8").'ому';
                break;
                 
            default:
                $result = $surname . "у";
         }        
    } elseif($sex == 0) { // Если Пол женский = 0
         
        switch ($l)
 
        {
            case 'о': case 'и': case 'б': case 'в': case 'г': case 'д': case 'ж': case 'з': case 'і': case 'ї': case 'к': case 'л': case 'м': case 'н': case 'п': case 'р': case 'с': case 'т': case 'ф': case 'х': case 'ц': case 'ч': case 'ш': case 'щ': case 'ь':
                $result = $surname;
                break;
                 
            case 'а':
                $len = mb_strlen($surname,"utf-8")-1;
                $result = mb_substr(trim($surname), 0,$len ,"utf-8").'ій';
                break;
                 
            default:
                $len = mb_strlen($surname,"utf-8")-2;
                $result = mb_substr(trim($surname), 0,$len ,"utf-8").'ій';
         }        
    }
 
return $result;
}

 
Имя в Дательном падеже
 

Код:
// Имя в Дательном падеже
function padezName ($name, $sex = 0){
 
$result = '';
 
    $l = mb_substr(trim($name),-1,1,"utf-8");
 
    if($sex == 1) { // Если Пол мужской = 1
     
        switch ($l)
 
        {
            case 'й':  
                $len = mb_strlen($name,"utf-8")-1;
                $result =mb_substr($name, 0,$len ,"utf-8").'ю';
                break;
                 
            case 'о':
                $len = mb_strlen($name,"utf-8")-1;
                $result =mb_substr($name, 0,$len ,"utf-8").'у';
                break;
                 
            default:
                $result = $name.'у';
         }        
     
    } elseif($sex == 0) { // Если Пол женский = 0
     
        switch ($l)
 
        {
            case 'я':  
                $len = mb_strlen($name,"utf-8")-1;
                $result = mb_substr(trim($name), 0,$len ,"utf-8").'ї';
                break;
                 
            case 'а':
                $len = mb_strlen($name,"utf-8")-1;
                $result = mb_substr(trim($name), 0 ,$len ,"utf-8").'і';
                break;
                 
            default:
                $result = $name;
         }        
     
    }
 
return $result;
}

 
Отчество в Дательном падеже
 

Код:
// Отчество в Дательном падеже
function padezMiddleName ($middleName, $sex = 0){
 
$result = '';
 
    if($sex == 1) { // Если Пол мужской = 1
     
                $result = $middleName . "у";
     
    } elseif($sex == 0) { // Если Пол женский = 0
     
          if (mb_substr(trim($middleName),-1,1,"utf-8") == 'а') {
                    $len = mb_strlen($middleName,"utf-8")-1;
                    $result = mb_substr(trim($middleName), 0,$len ,"utf-8").'і';
           
          } else {
                    $result = $middleName ;
           
          }
     
    }
 
return $result;
}

 
Использование "примитивное" передаем в функцию, например Фамилию и вторым параметром "пол" (муж = 1, жен = 0) и получаем в ответ значение в дательном падеже т.е. отдаем Иванов, получаем Иванову .. Все просто.
 
Добавлено:
Хотел поделиться с Вами скриптом для создания Адрессного классификатора Административного деления Украины с новыми почтовыми индексами населенных пунктов... Мало ли, может кому пригодится.
 
Скрипт создает необходимые таблицы в базе данных (MySQL 5.0) заполняет их данными,  все данные в таблицах уже повязаны кодами .. Имена таблиц для использования как в Joomla (например, #__umcit_spr_address_city), кому не нравится подправьте в скрипте под себя.
Если кому пригодится буду рад.
 
P.S. - Данные конвертированы из MS SQL 2005, у меня после конвертации, скрипт глюкнул в INSERT INTO на табличке (не помню точно - конвертил 2 мес назад и из-под phpMyAdmin глючил, а вот из-под EMS прокатывало) по-моему это табличка с наименованиями улиц ... Она не особо важна, так что можете INSERT INTO для нее кильнуть (ну вобщем если случиться error, то он подскажет). А остальное работает по сей день и в версии MySQL и в версии MS SQL 2005 (в MS SQL 2005 работает уже 4 года)
 
А это пример запроса для выборки --- Область --- Район ---Населенный пункт ... по заданному почтовому индексу
 

Код:
SELECT  
jos_umcit_spr_address_city.ID,
jos_umcit_spr_address_city.Name,
jos_umcit_spr_address_region.Name AS Reg_Name,
jos_umcit_spr_address_obl.Name AS OblName
FROM
jos_umcit_spr_address_region
INNER JOIN jos_umcit_spr_address_city ON (jos_umcit_spr_address_region.ID = jos_umcit_spr_address_city.Region_ID)
INNER JOIN jos_umcit_spr_address_obl ON (jos_umcit_spr_address_region.Oblast_ID = jos_umcit_spr_address_obl.ID)
WHERE
jos_umcit_spr_address_city.PostIndex5 = '09200'

 
P.S. - Не нашел. как тут можно прикрепить файл для скачивания. так что сам скрипт можно будет скачать ТУТ
И еще, в данных о почтовых индексах существуют сведения об Индексе для населенного пункта еще "Совдеповского" (старого) формата. Это, как вы помните 6-ти значные номера ... Т.е. есть новая и старая почтовая индексация  населенных пунктов Украины ...
Новые индексы находятся в поле PostIndex5
Старые "Совдеповские" индексы в поле PostIndex6

Всего записей: 19 | Зарегистр. 27-10-2006 | Отправлено: 21:04 03-11-2009 | Исправлено: OlegKor, 13:45 15-12-2009
yanus69



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

Всего записей: 750 | Зарегистр. 14-12-2006 | Отправлено: 00:22 16-11-2009 | Исправлено: yanus69, 00:24 16-11-2009
2007GhOsT2007

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть хорошая функция - call_user_func_array, но она удобна в том случае, если параметрами передаются существующие значения. Бывает появляется необходимость передать параметры функции в виде нескольких вложенных функций... Возможно решение не совсем оригинальное, а цель редко встречающаяся, но все же, решил поделиться им.

Код:
print(call_func_recurs(array("date", "d.m.Y", array("strtotime", "2009-11-22 00:00:00"))));
 
function call_func_recurs($a) {
  if (is_array($a)) {
    for ($i = 0; $i <= count($a); $i++) {
      if (is_callable($a[$i])) {
        $funct = $a[$i];
        unset($a[$i]);
        continue;
      }
      if (is_array($a[$i]))
        $a[$i] = call_func_recurs($a[$i]);
    }
  } else return $a;
  if ($funct)  
    $res = call_user_func_array($funct, $a);
  else return $a;
  return $res;
}

Всего записей: 26 | Зарегистр. 13-02-2007 | Отправлено: 22:59 22-11-2009
karabasss



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Тоже решил пару кусков из своих исходников выдрать
Распаковщик zip-ов. Пригодится тем у кого php без --with-zip
Поддерживает только методы сжатия deflate и no_compression.
Большинство зипов по умолчанию зажаты именно deflate, так что 95% архивов открывает без проблем. Запароленные не распаковывает.
Распаковывает также и вордовский docx (для чего, собственно, и был сделан, т.к. популярная либа PclZip, спотыкалась на куче нулей, которые ворд щедро пихает в свои файлы, видимо для того, чтобы размер файла не казался подозрительно маленьким )

Код:
 
<?php
// Radchand (C) radchand(a)mail.ru
 
$GLOBALS['unzip_error'] = 'Ok'; // Строка с описанием ошибки
 
/** Главная (и единственная) низкоуровняя ф-я для распаковки архива
// @desc Распаковывает текущий файл в архиве.
// Предназначана для работы в цикле.
// Если $target не задан, то просто перемещает указатель на следующий файл в архиве не распаковывая.
// Чтобы распаковать все файлы в архиве нужно вызывать эту ф-ю с одним и тем же handle до тех пор пока она не вернет false
// Аргументы:
// @param $file - имя файла или handle (возвращает fopen)
// @param $target - имя файла для распаковки, если не совпадает, то просто перемещает указатель в архиве на следующий файл, но возващает имя файла, его размер и пр.  
//      true - распаковывает любой файл
// @return Возвращает ассоциативный массив:  
//   FName - имя файла,  
//   Date, Time - дата и время в 2-х байтном MS-DOS формате,  
//   ExtractedLen - размер,  
//   Data - содержимое файла,  
//   Extra - дополн. данные
// если произошла какая-то ошибка, то возвращает false, скорее всего, последующие вызовы тоже вернут false, т.к. наверняка указатель сползет
// в случае ошибки из-за неподдерживаемого алгоритма распаковки, все же можно прочитать список файлов ($target=false)
*/  
function Unzip($file, $target=false)
{
    $h = is_string($file) ? fopen($file, 'rb') : $file;
    if($h===false)
        { $GLOBALS['unzip_error'] = "Can't open file"; return FALSE; }
    $offset = ftell($h);
    // ReadLocalFileHeader
    $hdr = unpack('V1Sign/v1Ver/v1Flags/v1Method/v1Time/v1Date/V1CRC/V1DataLen/V1ExtractedLen/v1FNameLen/v1ExtraLen', fread($h, 30));
    if($hdr['Sign'] == 0x02014b50)
        { $GLOBALS['unzip_error'] = 'End of file'; return FALSE; }
    if($hdr['Sign'] != 0x04034b50)
        { $GLOBALS['unzip_error'] = 'Invalid sign!'; return FALSE; }
    if($hdr['Flags'] & 0x0008) // Descriptor after data. Need read directory at first.
        { $GLOBALS['unzip_error'] = 'Descriptor after data'; return FALSE; }
 
    $hdr['Offset'] = $offset;
    $hdr['FName'] = fread($h, $hdr['FNameLen']);
    if($target == $hdr['FName'] || $target === true)
    {
        if($hdr['Method']!=8 && $hdr['Method']!=0) // only deflate & no_compression method implemented
            { $GLOBALS['unzip_error'] = 'Only deflate & no_compression method implemented'; return FALSE; }
        if($hdr['ExtraLen']>0)  
            $hdr['Extra'] = fread($h, $hdr['ExtraLen']);
        if($hdr['DataLen']>0)  
        {
            $hdr['Data']  = fread($h, $hdr['DataLen']);
            if($hdr['Flags'] & 0x0001)  
                { $GLOBALS['unzip_error'] = 'Encrypted';  return FALSE; }
            if($hdr['Method'] == 8)
                $hdr['Data'] = gzinflate($hdr['Data']); // deflate
        }
        if(strlen($hdr['Data']) != $hdr['ExtractedLen']) // bad length
            { $GLOBALS['unzip_error'] = 'Bad length'; return FALSE; }
        if(crc32($hdr['Data'])  != $hdr['CRC'])  
            { $GLOBALS['unzip_error'] = 'Bad CRC'; return FALSE; }
    }
    else
        fseek($h, $hdr['ExtraLen']+$hdr['DataLen'], SEEK_CUR);
    if(is_string($file)) fclose($h);
    return $hdr;
}
 
// Пара утилиток
 
/** @desc возвращает список файлов в архиве
*  @param путь к архиву */
function ZipList($file)
{
    $ret = array();
    $h = fopen($file,'rb');
    do {
        $data = Unzip($h);
        if(isset($data['FName']))
                $ret[] = $data['FName'];
    } while($data && !feof($h));
    fclose($h);
    return $ret;
}
 
/** @desc возвращает содержимое заданного файла из архива  
*  @param путь к архиву
*  @param путь (имя файла) в архиве
*/
function UnzipFile($arcfile, $file)
{
    $h = fopen($arcfile, 'rb');
    do {
        $data = Unzip($h, $file);
        if(isset($data['Data']))
        {
            fclose($h);
            return $data['Data'];
        }
    } while($data && !feof($h));
    fclose($h);
    return false;
}
 
/** @desc возвращает ассоц. массив [имяфайла]=содержимое со всеми файлами из архива  
*  @param путь к архиву */
function UnzipAll($arcfile)
{
    $ret = array();
    $h = fopen($arcfile, 'rb');
    do {
        $data = Unzip($h, $file);
        if($data && isset($data['FName'], $data['Data']))
            $ret[$data['FName']] = $data['Data'];
    } while($data && !feof($h));
    fclose($h);
    return $ret;
}
?>
 

 
Добавлено:
Класс Timer. Измерят промежутки времени. (Полезен для оптимизации, если не пользуетесь профилером.)

Код:
 
class Timer
{
    var $t1=0;
    var $t2=0;
    function Timer() // constructor
    {
        $this->start();
    }
 
    function start()
    {
        $this->t1=microtime(true);
        $this->t2=0;
    }
    function stop()
    {
        $this->t2=microtime(true);
    }
    function show($fmt="(%.3f сек)")
    {
        $t = $this->t2?$this->t2:microtime(true);
        printf($fmt,$t-$this->t1);
    }
}
 

Пользоваться так:

Код:
 
$timer   = new Timer;
... //кусок кода время выполнение которого меряем
$timer->stop(); // stop вобщем-то не обязателен, можно сразу show
$timer->show(); // аргументом можно задать форматную строку (как у printf)
 


Всего записей: 24 | Зарегистр. 09-02-2005 | Отправлено: 13:54 29-11-2009 | Исправлено: karabasss, 11:46 30-11-2009
suppalib

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Народ, кто может помочь?.... Нужно сделать "кнопку", которая будет запускать сначала одну программу, выполнять в ней какие-то действия, а потом другую .... У меня затуп .... Даже не знаю как эту хрень обозвать




Окулист вам сможет помочь, раз не можете прочитать текст в шапке /Cheery/

Всего записей: 14 | Зарегистр. 01-06-2009 | Отправлено: 11:03 01-12-2009 | Исправлено: Cheery, 20:16 01-12-2009
Vladson1980



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Небольшая "XOR-илка" на примитивном алгоритме (практической пользы конечно не много, но мало ли кому надо...)

Код:
<?php
/**
 *  Usage:
 *    string vladson_crypt1(string data, array seeds)
 *
 *  Example:
 *    $encoded = vladson_crypt1('123456', array(1, 2, 3));
 *    $decoded = vladson_crypt1($encoded, array(1, 2, 3));
**/
 
function vladson_crypt1 ($str, $keys) {
    $str = str_split($str);
    foreach($str as $key=>$val) {
        array_push($keys, (array_sum($keys)&255)*2);
        if (end($keys) > 255)
            array_push($keys, array_pop($keys)-255);
        array_shift($keys);
        $str[$key] = chr(ord($val)^end($keys));
    }
    return implode($str);
}
?>

Всего записей: 275 | Зарегистр. 19-08-2009 | Отправлено: 20:01 07-01-2010
KossMoss



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Функция Alert
Выводит переменную в виде сообщения Alert через Javascript, без вывода на экран (отлично подходит для замены print_r и echo для отладки приложений). Работает с массивами
 
function alert($value=''){
        if (is_array($value))$value=str_replace("\n",'\\n',print_r($value,true));
        echo "<script>alert('".str_replace("\r",'',str_replace('\\','\\\\',$file.$line).$variable.str_replace("'",'\\\'',str_replace("\n",'\\n',$value)))."')</script>";
}

Всего записей: 18 | Зарегистр. 10-06-2006 | Отправлено: 17:56 20-05-2010
RunetMan



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Лепим "копирайт" на ZIP-архив

Код:
<?php
 
$filepath = 'my_archive.zip';
 
$zip = new ZipArchive;
 
if ($zip->open($filepath) === TRUE)
 
{
 
//$zip->addFile('/papka/ReadMe_sait.RU.txt', 'ReadMe_sait.RU.txt');
 
$zip->setArchiveComment('адрес_сайта - супер-пупер-мего сайт!');
 
$zip->addFromString('адрес_сайта.RU.txt','Скачано с sait.RU');
 
$zip->close();
 
echo'гуд';
 
}
 
else
 
{
 
echo'ой!';
 
}
 
?>  

Всего записей: 5 | Зарегистр. 09-08-2010 | Отправлено: 12:31 11-08-2010 | Исправлено: RunetMan, 12:32 11-08-2010
fogx

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Эта функция принимает 4 переменных
$chislo -- число которому необходимо окончание  
$n1 -- текст при еденице (товар, день, рубль)  
$n2 -- текст при двух еденицах (товара, дня, рубля)  
$n5 -- текст при пяти еденицах (товаров, дней, рублей)  
 

Код:
 
function true_end($chislo,$n1,$n2,$n5){
    $chislo=(int)$chislo;  
    $ch=substr($chislo,-1);  
    if ($ch==1){  
        if (strlen($chislo)>1) $result=substr($chislo,-2,1)==1?$n5:$n1;  
        else $result=$n1;  
    }elseif($ch>1&&$ch<5){  
        if (strlen($chislo)>1) $result=substr($chislo,-2,1)==1?$n5:$n2;  
        else $result=$n2;  
    }else{  
        $result=$n5;  
    }  
    return $result;  
}  
 

 
 
пример:  " Мне пожалуйста " . true_end($num, 'пиво','пива','пив');
 

Всего записей: 1 | Зарегистр. 07-11-2006 | Отправлено: 13:36 17-08-2010
poyt



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
fogx
Зачем тут используются функции strlen и substr???
 
Мне больше нравиться другое решение этого вопроса.
Когда передаётся массив вместо нескольких переменных.

Код:
/**
 * Функция возвращает окончание для множественного числа слова на основании числа и массива окончаний
 * @param  $number Integer Число на основе которого нужно сформировать окончание
 * @param  $endingsArray  Array Массив слов или окончаний для чисел (1, 4, 5),
 *         например array('яблоко', 'яблока', 'яблок')
 * @return String
 */
function getNumEnding($number, $endingArray) {
   $number = $number % 100;
   if ($number>=11 && $number<=19) {
      $ending=$endingArray[2];
      }
   else {
      $i = $number % 10;
      switch ($i) {
         case (1): $ending = $endingArray[0]; break;
         case (2):
         case (3):
         case (4): $ending = $endingArray[1]; break;
         default: $ending = $endingArray[2];
         }
     }
  return $ending;
  }
 

 
Данный пример был мной встречен тут: http://habrahabr.ru/blogs/webdev/105428/
Кроме того, в комментариях там есть и другие решения данной задачи.

Всего записей: 642 | Зарегистр. 26-06-2006 | Отправлено: 03:56 01-12-2010 | Исправлено: poyt, 03:56 01-12-2010
1010



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Делает ч/б копии для всех фаилов в папке
 

Код:
    public function imageCreateGr($append = '_1') {
        foreach ($this->files as $file) {
            $create = 'imagecreatefrom'.$file['typename'];
            $save = 'image'.$file['typename'];
 
            $im = $create($file['pathname']);
            
            if($im && imagefilter($im, IMG_FILTER_GRAYSCALE)) {
                $pos = stripos($file['name'], '.'.$file['type']);
                $name = substr($file['name'], 0, $pos);
 
                $save($im, $this->dir.DIRECTORY_SEPARATOR.$name.$append.'.'.$file['type']);
            }
 
            imagedestroy($im);
            unset($im);
        }
    }

Всего записей: 89 | Зарегистр. 10-03-2008 | Отправлено: 13:50 08-12-2010 | Исправлено: 1010, 13:51 08-12-2010
The_S

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

Код:
// Вычисляет "самый маленький хэш" чего угодно на основе crc32
// Результат 6 - 7 символов [a-z0-9]
function TinyHash() {
    $Value = func_get_args();
    $Crc = crc32(serialize($Value));
    $Crc = sprintf('%u', $Crc);
    $Hash = base_convert($Crc, 10, 36);
    return $Hash;
}

Идея проста десятичное число переводится в 36-ричную систему.
Можно пойти дальше и еще сократить длину хэша если использовать большие буквы и спец-символы (62, 72-ричная и больше), но надо писать свою функцию для перевода в такую систему счисления.
 
P.S. Для файлов можно использовать TinyHash(md5_file($File));

Всего записей: 188 | Зарегистр. 13-09-2006 | Отправлено: 02:06 19-12-2010
Uhehesh

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Иногда требуется знать не только значение переменной, но и её имя. Для этого, я написал следующую функцию:
 

Код:
 
function getvarname(&$var)
{
 $data = rand(0, 9000) . rand(0, 9000) . rand(0, 9000);
 $value = $var;
 $var = $data;
 foreach($GLOBALS as $key => $val)
 {
  if($val == $data) $result = $key;
 }
 $var = $value;
 return $result;
}
 

Всего записей: 1 | Зарегистр. 10-01-2011 | Отправлено: 16:02 10-01-2011
fd8080

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ХОРОШЬ




читаем внимательно шапку темы /Cheery/

Всего записей: 11 | Зарегистр. 06-02-2011 | Отправлено: 11:27 06-02-2011 | Исправлено: Cheery, 11:42 06-02-2011
The_S

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Думаю по теме:
Одна фирма проводит своеобразный конкурс на "самую полезную функцию" на PHP. Призы (Ноут, Zend Studio 8, Книга).
 
Принять участие в конкурсе, отправив свою функцию (или класс) можно тут http://projects.westhost.com/contest/php/
 
Список решений: http://projects.westhost.com/contest/php/snippet/listing
На данный момент ~ 125 штук.
 
Довольно все стандартные и примитивные (типа ЧПУрлов и т.п.) , но есть и реально оригинальные и полезные.

Всего записей: 188 | Зарегистр. 13-09-2006 | Отправлено: 15:16 25-02-2011 | Исправлено: The_S, 15:19 25-02-2011
bishopik



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

Всего записей: 21 | Зарегистр. 26-12-2010 | Отправлено: 15:42 02-05-2011 | Исправлено: bishopik, 15:44 02-05-2011
Netsu



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Функция ресайзит картинки, в том числе анимированные gifы. Если будет не хватать памяти, то выведет ошибку, но не прервет работу скрипта. Требуется imagick.
$image['md5'] - название файла
200 - ширина получившейся картинки
 

Код:
function parse_make_thumb($image) {
 
  // создаем превью
  if ($image['width'] <= 200) {
 
    file_put_contents("thumbs/".$image['md5'].".".$image['type'], file_get_contents("images/".$image['md5'].".".$image['type']));
    return;
 
  } else {
 
    $xscale = $image['width'] / 200;
    $new_width = round($image['width'] * (1 / $xscale));
    $new_height = round($image['height'] * (1 / $xscale));
 
  }
 
  $thumb = new Imagick();
 
  try {
 
    $thumb->readImage("images/".$image['md5'].".".$image['type']);
 
  }
 
  catch (ImagickException $e) {
 
    echo "<center><h3>Непотянуло файл: ".$image['md5'].".".$image['type']."</h3></center>";
    return 0;
 
  }
  //делаем превью, размер меньше, чем у фона, чтобы было куда впихнуть тень
  //   $thumb->thumbnailImage($new_width, $new_height);
  if ($thumb->getNumberImages() > 1) {
 
    foreach ($thumb as $frame) {
 
      $frame->resizeImage($new_width, $new_height, Imagick::FILTER_TRIANGLE, 1);
 
    }
    //записываем картинку
    $thumb->writeImages("thumbs/".$image['md5'].".".$image['type'], 1);
 
  } else {
 
//     $thumb->resizeImage($new_width, $new_height, Imagick::FILTER_TRIANGLE, 1);
 
    try {
 
      $thumb->thumbnailImage(200, null);
 
    }
 
    catch (ImagickException $e) {
 
      echo "<center><h3>Непотянуло файл: ".$image['md5'].".".$image['type']."</h3></center>";
      return 0;
 
    }
 
    $thumb->writeImage("thumbs/".$image['md5'].".".$image['type']);
 
  }
  //подчищаем за собой
  $thumb->destroy();
 
  return;
 
}

Всего записей: 33 | Зарегистр. 31-03-2010 | Отправлено: 05:01 04-05-2011
alyent



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

Всего записей: 1087 | Зарегистр. 09-03-2002 | Отправлено: 03:58 15-06-2011 | Исправлено: alyent, 04:09 15-06-2011
alex lego

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

Всего записей: 57 | Зарегистр. 28-02-2010 | Отправлено: 18:29 20-06-2011
IFKey



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мой класс для вывода графиков Google Chart Tools: http://code.google.com/intl/ru-RU/apis/chart/interactive/docs/gallery.html
Класс:
Цитата:
<?
class googleChart
{
    var $addColumn = array();
    var $addRows = array();
    var $options = array();
 
    function chartAddColumn($title,$type='number')
    {
       $this->addColumn['type'][] = $type;    # string | number
       $this->addColumn['title'][] = $title;
    }
 
    function chartOptions($option,$param)
    {
       $this->options['option'][] = $option;
       $this->options['param'][] = $param;
    }
 
    function chartAddRows($title,$param=array())
    {
       $this->addRows['title'][] = $title;
       $this->addRows['param'][] = $param;
    }
 
    function chartAddColumnFunc($addColumn)
    {
       if (empty($addColumn)) {return false;}
       foreach ($addColumn['title'] as $k=>$v) {
           $r .= "data.addColumn('".$addColumn['type'][$k]."', '".$addColumn['title'][$k]."');\n";
       }
       return $r;
    }
 
    function chartAddRowsFunc($addRows)
    {
         if (empty($addRows)) {return false;}
         foreach ($addRows['title'] as $k=>$v) {
            $r .= "\n['".$addRows['title'][$k]."',".$this->chartAddRowsFuncParam($addRows['param'][$k])."],";
         }
         $r = $this->deLostChar($r);
         return $r;
    }
 
    function chartOptionFunc($options)
    {
         if (empty($options)) {return false;}
         foreach ($options['option'] as $k=>$v) {
            $r .= "\n".$options['option'][$k].": ".$options['param'][$k].",";
         }
         $r = $this->deLostChar($r);
         return $r;
    }
 
    function chartAddRowsFuncParam($addRowsParam=array())
    {
       foreach ($addRowsParam as $v) {
           $r .= $v.',';
       }
       $r = $this->deLostChar($r);
       return $r;
    }
    # $type: BarChart, PieChart, LineChart, ComboChart, ColumnChart, CandlestickChart, BubbleChart, AreaChart
    # options('title', 'заголовок');
    # options('is3D', 'true');   # для PieChart
    function chartDraw($title,$divName,$type='BarChart')
    {
      print '
          <script type="text/javascript">
            google.load("visualization", "1", {packages:["corechart"]});
            google.setOnLoadCallback(drawChart);
            function drawChart() {
              var data = new google.visualization.DataTable();
              '.$this->chartAddColumnFunc($this->addColumn).'
              data.addRows([
                '.$this->chartAddRowsFunc($this->addRows).'
              ]);
              var options = {
                '.$this->chartOptionFunc($this->options).'
              };
              var chart = new google.visualization.'.$type.'(document.getElementById("'.$divName.'"));
              chart.draw(data, options);
            }
          </script>';
 
     $this->addColumn = array();
     $this->addRows = array();
     $this->options = array();
    }
}
?>

Использование:

Цитата:
<?
$gChart=new googleChart;
 
$gChart->chartAddColumn('day','string');
$gChart->chartAddColumn('хосты','number');
$gChart->chartAddColumn('хиты','number');
 
$gChart->chartOptions('title',"'Статистика посещений'");
 
$gChart->chartAddRows('за сегодня',array(10,18));
$gChart->chartAddRows('за неделю',array(75,232));
$gChart->chartAddRows('за месяц',array(334,749));
 
$gChart->chartDraw('Статистика посещений','chart_div','BarChart');
?>
<div id="chart_div" style="width:700px;height:200px;"></div>
Реализован не весь функционал предоставленный гуглом, так что можете доработать по своему вкусу

----------
Предлагаю запчасти для спецтехники и пышные юбки пачки :)

Всего записей: 331 | Зарегистр. 20-03-2007 | Отправлено: 16:45 01-03-2012 | Исправлено: IFKey, 14:51 09-06-2012
vof4ikWP

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Генерация имени папки с порядковыми номерами
 

Код:
 
function getNextDirName($directory = './', $prefix = 'store')
{
    $founded = preg_grep('/' . $prefix . '/i', scandir($directory));
    return $prefix . (max(array_map('intval', array_map('str_replace',  
        array_fill(0, count($founded), $prefix),  
        array_fill(0, count($founded), ''), $founded))) + 1);
}
 

 
Добавлено:
перевод xml текста в php массив 1 строкой

Код:
$array = json_decode(json_encode(simplexml_load_string('<xml>some</xml>')), true);

Всего записей: 5 | Зарегистр. 21-06-2012 | Отправлено: 20:58 21-06-2012
The_S

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

Цитата:
перевод xml текста в php массив 1 строкой  

Это простой метод для XML-ки без атрибутов, но если есть аттрибуты, то они потеряются.
XML to Array без потери атрибутов.
http://whoooopblog.appspot.com/xml.txt

Всего записей: 188 | Зарегистр. 13-09-2006 | Отправлено: 15:43 01-07-2012
KazZan



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Насчет XML, дали мне как то задание по синхронизации двух хмл,вроде ничего сложного,использовал обыкновенные функции парсера XML... небольшие трудности возникли при правильной организации xml структуры из ассоциативного массива в готовую законченную структуру DOM хмл. И тогда я наткнулся на довольно интересный класс предлагающий решить эту задачу.
вот собсно ссылка(мож кому пригодитцо) http://www.lalit.org/lab/convert-php-array-to-xml-with-attributes/

Всего записей: 6 | Зарегистр. 28-06-2007 | Отправлено: 11:23 04-07-2012
Ruslanski

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ребята помогите пожалуйста разобраться с iframe кодом,




Научитесь сначала читать названия тем. /Cheery/

Всего записей: 29 | Зарегистр. 28-02-2012 | Отправлено: 01:28 21-07-2012 | Исправлено: Cheery, 01:46 21-07-2012
kwadrox1980

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




Не занимайтесь флеймом!! /Cheery/

Всего записей: 4 | Зарегистр. 29-08-2012 | Отправлено: 16:02 07-09-2012 | Исправлено: Cheery, 19:16 07-09-2012
hawik



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Простая функция для записи лога в файл, с временем.  
Удобна для отладки или записи критических ситуаций.  
 

Код:
 
function toLog($str) {
 
    $logfilename = "runs.log"; // log filename
    $fp = fopen ($logfilename, "a");
    $s_time = date("Y-m-d H:i:s");
    fputs($fp, $s_time. "=>".$str ."\n");
    fclose($fp);
}
 

Всего записей: 55 | Зарегистр. 30-11-2002 | Отправлено: 12:55 28-09-2012
R3Pa4eK



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

Код:
 
function validusername($username) {
//Функция для проверки имени пользователя (при регистрации, например)
    if ($username == "")
      return false;
 
    $allowedchars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_".
        "абвгдеёжзиклмнопрстуфхшщэюяьъАБВГДЕЁЖЗИКЛМНОПРСТУФХШЩЭЮЯЬЪ";
 
    for ($i = 0; $i < strlen($username); ++$i)
      if (strpos($allowedchars, $username[$i]) === false)
        return false;
 
    return true;
}
 
function validemail($email) {
//Проверка мыла
    return preg_match('/^[\w.-]+@([\w.-]+\.)+[a-z]{2,6}$/is', $email);
}
 
function validfilename($name) {
//Проверка имени файла
    return preg_match('/^[^\0-\x1f:\\\\\/?*\xff#<>|]+$/si', $name);    
}
 
function format_comment($text, $strip_html = true) {
//bb-code и не только
    $s = $text;
    $s = preg_replace_callback("#\[code\](.*?)\[/code\]#si","code_nobb",$s);
    $s = str_replace("  ", " &nbsp;", $s);
    $s = nl2br($s);
    
    $bb[] = "#\[img\](?!javascript([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#i";
    $html[] = "<img class=\"linked-image\" src=\"\\1\" border=\"0\" alt=\"\\1\" title=\"\\1\" />";
    $bb[] = "#\[img=([a-zA-Z]+)\](?!javascript([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#is";
    $html[] = "<img class=\"linked-image\" src=\"\\2\" align=\"\\1\" border=\"0\" alt=\"\\2\" title=\"\\2\" />";
    $bb[] = "#\[img\ alt=([a-zA-Zа-яА-Я0-9\_\-\. ]+)\](?!javascript([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#is";
    $html[] = "<img class=\"linked-image\" src=\"\\2\" align=\"\\1\" border=\"0\" alt=\"\\1\" title=\"\\1\" />";
    $bb[] = "#\[img=([a-zA-Z]+) alt=([a-zA-Zа-яА-Я0-9\_\-\. ]+)\](?!javascript([^?](?:[^\[]+|\[(?!url))*?)\[/img\]#is";
    $html[] = "<img class=\"linked-image\" src=\"\\3\" align=\"\\1\" border=\"0\" alt=\"\\2\" title=\"\\2\" />";
    $bb[] = "#\[kp=([0-9]+)\]#is";
    $html[] = "<a href=\"http://www.kinopoisk.ru/level/1/film/\\1/\" rel=\"nofollow\"><img src=\"http://www.kinopoisk.ru/rating/\\1.gif/\" alt=\"Kinopoisk\" title=\"Kinopoisk\" border=\"0\" /></a>";
    $bb[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is";
    $html[] = "<a href=\"\\1\" title=\"\\1\">\\1</a>";
    $bb[] = "#\[url\]((www|ftp)\.([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is";
    $html[] = "<a href=\"http://\\1\" title=\"\\1\">\\1</a>";
    $bb[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
    $html[] = "<a href=\"\\1\" title=\"\\1\">\\2</a>";
    $bb[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
    $html[] = "<a href=\"http://\\1\" title=\"\\1\">\\3</a>";
    $bb[] = "/\[url=([^()<>\s]+?)\]((\s|.)+?)\[\/url\]/i";
    $html[] = "<a href=\"\\1\">\\2</a>";
    $bb[] = "/\[url\]([^()<>\s]+?)\[\/url\]/i";
    $html[] = "<a href=\"\\1\">\\1</a>";
    $bb[] = "#\[mail\](\S+?)\[/mail\]#i";
    $html[] = "<a href=\"mailto:\\1\">\\1</a>";
    $bb[] = "#\[mail\s*=\s*([\.\w\-]+\@[\.\w\-]+\.[\w\-]+)\s*\](.*?)\[\/mail\]#i";
    $html[] = "<a href=\"mailto:\\1\">\\2</a>";
    $bb[] = "#\[color=(\#[0-9A-F]{6}|[a-z]+)\](.*?)\[/color\]#si";
    $html[] = "<span style=\"color: \\1\">\\2</span>";
    $bb[] = "#\[(font|family)=([A-Za-z ]+)\](.*?)\[/\\1\]#si";
    $html[] = "<span style=\"font-family: \\2\">\\3</span>";
    $bb[] = "#\[size=([0-9]+)\](.*?)\[/size\]#si";
    $html[] = "<span style=\"font-size: \\1\">\\2</span>";
    $bb[] = "#\[(left|right|center|justify)\](.*?)\[/\\1\]#is";
    $html[] = "<div align=\"\\1\">\\2</div>";
    $bb[] = "#\[b\](.*?)\[/b\]#si";
    $html[] = "<b>\\1</b>";
    $bb[] = "#\[i\](.*?)\[/i\]#si";
    $html[] = "<i>\\1</i>";
    $bb[] = "#\[u\](.*?)\[/u\]#si";
    $html[] = "<u>\\1</u>";
    $bb[] = "#\[s\](.*?)\[/s\]#si";
    $html[] = "<s>\\1</s>";
    $bb[] = "#\[li\]#si";
    $html[] = "<li>";
    $bb[] = "#\[hr\]#si";
    $html[] = "<hr>";
    
    $s = preg_replace($bb, $html, $s);
    
    return $s;
}
 

Всего записей: 963 | Зарегистр. 15-01-2011 | Отправлено: 12:49 11-11-2012
IFKey



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Функция добавляет водяной знак к изображению:
$input_uri - путь к исходному изображению
$output_uri - путь к изображению на выходе
$watermark_uri - путь к PNG файлу - водяному знаку


Цитата:
function waterMark($input_uri,$output_uri,$watermark_uri)
{
  # Загрузка штампа и фото, для которого применяется водяной знак (называется штамп или печать)
  $stamp = imagecreatefrompng($watermark_uri);
  $im = imagecreatefromjpeg($input_uri);
 
  # Установка полей для штампа и получение высоты/ширины штампа
  $marge_right = 10;
  $marge_bottom = 10;
  $sx = imagesx($stamp);
  $sy = imagesy($stamp);
 
  # Копирование изображения штампа на фотографию с помощью смещения края
  # и ширины фотографии для расчета позиционирования штампа.
  imagecopy($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
 
  imagejpeg ($im, $output_uri, "100");
  # Вывод и освобождение памяти
  //header('Content-type: image/png');
  //imagepng($im);
  imagedestroy($im);
}


----------
Предлагаю запчасти для спецтехники и пышные юбки пачки :)

Всего записей: 331 | Зарегистр. 20-03-2007 | Отправлено: 22:47 28-04-2013
sherzet

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




Прочитайте внимательно название темы. Ваш вопрос не имеет к ней никакого отношения. /Cheery/

Всего записей: 1 | Зарегистр. 06-08-2013 | Отправлено: 02:53 07-08-2013 | Исправлено: Cheery, 09:49 07-08-2013
torenntov

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Всем привет, подскажите на какой cms стоит этот сайт? http://***.ru/




Шапку прочитать - религия не позволяет? /Cheery/

Всего записей: 3 | Зарегистр. 28-08-2013 | Отправлено: 23:34 28-08-2013 | Исправлено: Cheery, 23:36 28-08-2013
Banshi

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здравствуйте!
 
Я в php совершенно не разбираюсь (только начал читать книжку по основам), но есть необходимость настроить ссылку на локальный ресурс:
 
1. сайт на движке joomla 1.5
2. используются браузеры IE, firefox, chrom.
3. есть шара \\192.168.1.50\post\2013
 
я пробовал настроить ссылку на странице вида: file://\\192.168.1.50\post\2013,
но она открывается только в IE.
 
Вопрос: есть ли какой-нибудь вид ссылки, чтобы открывался во всех браузерах.
Если нет, то есть ли какой-нибудь код для открытия во всех браузерах или МОД для joomla 1.5?




Но читать то вы умеете? Так прочитайте же шапку..

Всего записей: 1 | Зарегистр. 08-06-2006 | Отправлено: 03:12 17-09-2013 | Исправлено: Cheery, 03:14 17-09-2013
IFKey



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Простенькая функция для генерации одноуровневого меню:

Цитата:
private function CreateElementMenu($elementTpl,$element = array())
{
   $elementTpl = str_replace('#DOMAIN#',$this->domain,$elementTpl);
   foreach($element as $key=>$value)
   {
     $elementTpl = str_replace('#'.$key.'#',$value,$elementTpl);
   }
   return $elementTpl;
}
 
public function CreateMenu($elementTpl,$items = array(),$delimiter = false)
{
  $r = array();
  foreach($items as $key=>$item)
  {
     $r[] = $this->CreateElementMenu($elementTpl,$item);
  }
  return implode($delimiter,$r);
}

Использовать так:

Цитата:
 
$TopMenu = array(
    array(
      'URL' => '/',
      'TEXT' => 'Главная'
    ),
    array(
      'URL' => '/about.html',
      'TEXT' => 'О компании'
    ),
    array(
      'URL' => '/details.html',
      'TEXT' => 'Реквизиты'
    ),
    array(
      'URL' => '/our_work.html',
      'TEXT' => 'Наши работы'
    ),
    array(
      'URL' => '/contacts.html',
      'TEXT' => 'Контакты'
    )
);
$elementTpl = '<a href="http://www.#DOMAIN#/#URL#">#TEXT#</a>';
print $this->CreateMenu($elementTpl,$TopMenu, ' |');
 

Всего записей: 331 | Зарегистр. 20-03-2007 | Отправлено: 10:04 07-12-2013 | Исправлено: IFKey, 10:09 07-12-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IFKey
тогда уж проще более гибкое решение (опять же, пример без рекурсии)

Код:
function CreateMenu($func, $items = array(), $delimiter = false)  
{  
   $r = array();  
   foreach($items as $item)  
      $r[] = call_user_func($func, $item);  
   return implode($delimiter, $r);  
}  
 
echo CreateMenu(function($node) {  
   return '<a href="http://www.domain.ru/' . $node['URL'] . '">' . $node['TEXT'] . '</a>';
}, $TopMenu, ' |');



----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 04:08 08-12-2013 | Исправлено: Cheery, 04:09 08-12-2013
vof4ikWP

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Как отсортировать ip ?
Преобразуем ip в число. Числа легко поддаются сортировке

Код:
 
    function convertIpToInt($sIpAddress)
    {
        $aTemp = explode(".", $sIpAddress);
        $nIpAddress = 0;
        foreach ($aTemp as $k => $v) {
            $nIpAddress += pow(256, 3 - $k) * $v;
        }
        return $nIpAddress;
    }
 

Преобразуем число обратно в ip

Код:
 
    function convertIntToIp($nIpAddress)
    {
        for ($i = 0; $i < 4; $i++){
            $aTemp[$i] = floor($nIpAddress / pow(256, 3 - $i));
            $nIpAddress = $nIpAddress - $aTemp[$i] * pow(256, 3 - $i);
        }
        return implode(".", $aTemp);
 
    }
 

Всего записей: 5 | Зарегистр. 21-06-2012 | Отправлено: 15:43 23-12-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vof4ikWP
зачем изобретать велосипед?
http://www.php.net/ip2long
http://www.php.net/long2ip

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:42 23-12-2013
vof4ikWP

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Cheery
Действительно, . Но сегодня 6 разработчиков минимум мидл уровня, с разных компаний не знали о них.  А вот оно как. Можно удалить мой велосипед, дабы не засорять такую хорошую тему. Спасибо

Всего записей: 5 | Зарегистр. 21-06-2012 | Отправлено: 00:02 24-12-2013 | Исправлено: vof4ikWP, 00:03 24-12-2013
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Если кому нужно - набросал небольшой BBcode парсер (сразу говорю - не работает с вложенными однотипными тегами, то есть [b]123[b]345[/b]567[/b]
не хотелось заниматься парсингом таких вещей.
Ну и не претендую на красоту кода - нужно было быстро и использовался код для генерации контента тега..
 

Код:
namespace ShortCodes;
 
class ShortCodes {
    private $tags = array();
    private $namespace = '\\ShortCodes\\';
    private $path = 'tags/';
    private $regexp = '/\[(?<tag>\w+)(=(?P<value>[^\]]+))?\]((?P<content>(?:(?!\[\\1).)*?)(\[\/\\1\]))?/is';
 
    public function convert_tags($text)
    {
        if (!is_string($text) || empty($text))
            return $text; // works only with text
        else
            return $this->format_tags($text);
    }
 
    private function format_tags($input)
    {
        $string = '';
 
        if (is_array($input)) // call from callback
        {
            $string = $input[0];
            $tag = strtolower($input['tag']);
            $value = isset($input['value']) ? $input['value'] : false;
            $content = isset($input['content']) ? $input['content'] : false;
 
            if (!file_exists(__DIR__ . '/' . $this->path . ucfirst($tag) . 'Tag.php')) // tag does not exist
            {
                if (!$content) // no enclosed text, return as is
                        return $string;
                // or try to parse the content of the tag, leaving the original tag as is
                return '[' . $tag . ($value ? '=' . $value : '') . ']' .
                       preg_replace_callback($this->regexp, array($this, 'format_tags'), $content) .
                       '[/' . $tag . ']';
             }
            
        if (!isset($this->tags[$tag])) // class not loaded
            {
                include(__DIR__ . '/' . $this->path . ucfirst($tag) . 'Tag.php');  // include tag class
                $className = $this->namespace . ucfirst($tag) . 'Tag';
                $this->tags[$tag] = new $className(); // initialize and store in array
            }
 
            $input = $this->tags[$tag]->convert_tag($value, $content); // format requested tag
            if ($input === '') // clear tags
                return '';
        }
 
        return $input === false ? $string : preg_replace_callback($this->regexp, array($this, 'format_tags'), $input);
    }
}
 
 
abstract class AbstractTag {
    protected $tagName = '';
    protected $value = '';
    protected $content = '';
 
    public function __construct()
    {
        // set tag name from its class
        $this->tagName = preg_replace('/Tag$/', '', basename(get_class($this)));
    }
 
    public function convert_tag($value = '', $content = '')
    {
        $this->value = $value;
        $this->content = $content;
        return $this->format_tag();
    }
 
    abstract protected function format_tag();
}

 
Классы тегов находятся в папке tags, файл называется Имя_тегаTag.php, ну и класс в нем, соответственно, Имя_тегаTag
Для удобства введено пространство имен.
 

Код:
namespace ShortCodes;
 
class BTag extends AbstractTag {
 
    protected function format_tag()
    {
        if ($this->content) // requires closing tag
            return '<b>' . $this->content . '</b>';
        return false;
    }
}

 
данный код оборачивает [b]текст[/b] в <b>текст</b>
если внутри есть другие теги (не b), то они будут обработаны тоже.
 
работает с закрытыми и не только тегами
[tag=value], [tag=value]content[/tag], [tag], [tag]content[/tag]
в классе обработки тега они находятся в $this->value и $this->content, соответственно
 
классы тегов подгружаются по мере надобности.
можно, конечно, сделать автозагрузку и тд и тп, но не было необходимости.
 
ps: ну и  
        if ($this->content) // requires closing tag  
            return '<b>' . $this->content . '</b>';  
        return false;  
 
если нет контента и возвращается false, то теги так и остаются текстом.
если вернуть пустую строк return '';, то тег будет удален (содержимое, если есть, останется)

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 10:36 03-02-2014 | Исправлено: Cheery, 10:42 03-02-2014
Andy_t

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

Всего записей: 134 | Зарегистр. 22-01-2002 | Отправлено: 19:40 23-02-2014
TrallBus



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
кто-нибудь может скинуть ссылку на хороший учебник по РНР, чтоб самому можно было поучиться

Всего записей: 22 | Зарегистр. 23-02-2014 | Отправлено: 23:01 11-03-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
TrallBus
внимательно, очень внимательно, прочитайте название темы.
Информация по PHP: учебники, ресурсы, документация
PHP ebooks

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 00:19 12-03-2014
ShaDOWNIK



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

Всего записей: 23 | Зарегистр. 07-05-2009 | Отправлено: 18:15 30-04-2014 | Исправлено: ShaDOWNIK, 18:18 30-04-2014
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ShaDOWNIK
Безопасное программирование на PHP
если вы знаете язык хорошо, то и понимаете откуда может прийти проблема.
поэтому сложно сказать что то о книгах.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 23:30 30-04-2014
ShaDOWNIK



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

Всего записей: 23 | Зарегистр. 07-05-2009 | Отправлено: 07:00 01-05-2014
SashaShura

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




Запрещено дублировать свой вопрос в разных темах, тем более не подходящих по тематике.

Всего записей: 3 | Зарегистр. 04-05-2014 | Отправлено: 15:48 04-05-2014
esche

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
На мой взгляд, изучение PHP лучше начинать не с PHP, а с базовых (?) понятий программирования - константы, переменные, циклы, алгоритмы, функции, процедуры, классы/объекты/методы, рекурсия и т.д.
 
По безопасности - есть смысл начинать с мануала
 
 
Потёрто (ответ на оффтоп)
Подробнее...

Всего записей: 49 | Зарегистр. 03-05-2013 | Отправлено: 14:59 07-05-2014 | Исправлено: esche, 15:03 07-05-2014
Mordavorot



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




Научитесь читать названия тем и шапки в них!

Всего записей: 1195 | Зарегистр. 01-09-2011 | Отправлено: 16:03 09-05-2014
antonpv



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

Цитата:
Но сегодня 6 разработчиков минимум мидл уровня, с разных компаний не знали о них.

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

Всего записей: 65 | Зарегистр. 18-10-2012 | Отправлено: 19:01 05-09-2014
gorenski



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

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

на ру-борде или вообще?




Используйте ПМ и перечитайте название темы.

Всего записей: 711 | Зарегистр. 29-01-2003 | Отправлено: 05:27 16-03-2015
Dim Dimych 02



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Скрываем email от ботов.
Да и вообще для вывода корректно в разных браузерах русских букв в javascript'е.
 

Код:
 
class HTML {
 
/**
* @var  boolean  Для XHTML
*/
public static $strict = TRUE;
 
 
/**
*    echo HTML::chars($value);
*
* @param   string  $value  
* @param   boolean $double_encode
* @param   string  $charset
* @return  string
*/
public static function chars($value, $double_encode = TRUE, $charset = 'utf-8')
{
            return $value !== '' && self::$strict ? htmlspecialchars( (string) $value, ENT_QUOTES, $charset, $double_encode) : $value;
}
 
 
/**
*    echo HTML::to_unicode($value)
*
* @param   string  $value  
* @param   boolean $encode
* @return  string
*/
public static function to_unicode($value = '', $encode = TRUE)
{
            $ansi = array(
'№', ' ',
'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И',
'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т',
'У', 'Ф', 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь',
'Э', 'Ю', 'Я',
        'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и',
        'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т',
        'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь',
 'э', 'ю', 'я'
 );
 
        $unicod = array(
        '\u2116', '\u0020',
        '\u0410', '\u0411', '\u0412', '\u0413', '\u0414',
        '\u0415', '\u0401', '\u0416', '\u0417', '\u0418',
        '\u0419', '\u041A', '\u041B', '\u041C', '\u041D',
        '\u041E', '\u041F', '\u0420', '\u0421', '\u0422',
        '\u0423', '\u0424', '\u0425', '\u0426', '\u0427',
        '\u0428', '\u0429', '\u042A', '\u042B', '\u042C',
        '\u042D', '\u042E', '\u042F',
        '\u0430', '\u0431', '\u0432', '\u0433', '\u0434',
        '\u0435', '\u0451', '\u0436', '\u0437', '\u0438',
        '\u0439', '\u043A', '\u043B', '\u043C', '\u043D',
        '\u043E', '\u043F', '\u0440', '\u0441', '\u0442',
        '\u0443', '\u0444', '\u0445', '\u0446', '\u0447',
        '\u0448', '\u0449', '\u044A', '\u044B', '\u044C',
        '\u044D', '\u044E', '\u044F'
        );
 
        return ($encode) ? str_replace($ansi, $unicod, $value) : str_replace($unicod, $ansi, $value);
}
 
 
/**
*     echo HTML::mailto($email, 'text', 'id');
*
* @param   string  $email
* @param   string  $title
* @param   string  $id
* @return  string
*/
public static function mailto($email, $title = NULL, $id = 'output_em_text')
{
$out = '';
 
if ($email !== '')
{
$email = self::chars( (string) $email);
$email = str_replace(array('@', '.'), array('&', '*'), $email);
              
           $title =  self::chars( (string) $title);
           $title = (($title == '') ? 'x' : '"' .self::to_unicode($title) .'"');
 
           $out = '<a href="&#109;&#097;&#105;&#108;&#116;&#111;&#058;:' .$email .'">' .$title .'</a>'
                 .'<script type="text/javascript">'
                 .'/*<![CDATA[*/'
                 .'var e=document.getElementById("' .$id .'");'
                 .'var x="' .$email .'";'
                 .'x=x.replace("&","@");'
                 .'x=x.replace(/\*/g,".");'
                 .'e.href=e.href+x;'
                 .'e.innerHTML=' .$title .';'
                 .'/*]]>*/'
                 .'</script>';
        }
         
        return $out;
}
}
 

Всего записей: 2 | Зарегистр. 18-03-2015 | Отправлено: 20:02 18-03-2015 | Исправлено: Dim Dimych 02, 20:07 18-03-2015
MaxGalCom



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И нахрена скрывать? Почту с домена цеплять на яндекс или маил или гугл маил, которые и так успешно со спамом борются, чем засорять лишним JS веб страницу




Здесь не тема для вопросов. Тем более, в ряде случаев, почту нежелательно куда то еще переносить.

Всего записей: 1 | Зарегистр. 19-08-2015 | Отправлено: 08:16 19-08-2015
MaxXx1313



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
для красивой отладки
 
 
/**
 * print_table()
 *  
 * @param mixed $mixed
 * @param integer $level
 * @return
 */
function print_table($mixed, $level=9){
  if($level<=0){ echo '**LIMIT**'; return; }
 
  $is_obj = is_object($mixed);
  if( $is_obj )
    $mixed = get_object_vars($mixed);
   
  if($level==9) echo '<br />';
 
  if(is_array($mixed)){
    if( empty($mixed) )
      if($is_obj)
        echo '<span style="color:blue">{empty object}</span>';
      else
        echo '<span style="color:blue">[empty array]</span>';
    else{
      echo '<table cellspacing="0" width="100%" border="1" '.($is_obj?'style="border-style: dashed;"':'').'>';
      foreach($mixed as $key=>$val){
        echo '<tr><td width="20%">';
        print_table($key, 1);
        echo'</td><td>';
        print_table($val, $level-1);
        echo '</td></tr>';
      }
      echo '</table>';
    }
  }elseif(is_null($mixed)){
    echo '<span style="color:blue">null</span>';
  }elseif($mixed===false){
    echo '<span style="color:red">false</span>';
  }elseif($mixed===true){
    echo '<span style="color:green">true</span>';
  }elseif(is_numeric($mixed) && $mixed>1000000000){
    echo $mixed,' <span style="color:gray">[',date('d-m-Y H:i:s',$mixed),']</span>';
  }elseif($mixed===''){
    echo '<span style="color:blue">empty string</span>';      
  }else{
    echo $mixed;
  }
   
}

Всего записей: 35 | Зарегистр. 30-06-2011 | Отправлено: 17:18 01-10-2015
leshikbr

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

Всего записей: 69 | Зарегистр. 16-05-2012 | Отправлено: 10:11 17-10-2015
Kaber



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

Код:
<?
$url = $_SERVER['REQUEST_URI'];  //получаем url страницы и записываем в $url
 
$array_d = array(
"Дискрипшен главная" => '/',
"Дискрипшен контактов" => '/kontakty/'
 );
 
$array_t = array(
"Татйл главная" => '/',
"Тайтл контакты" => '/kontakty/'
 );
 
$array_k = array(
"Кейвордс главная" => '/',
"Кейвордс контакты" => '/kontakty/'
 );
 
////////////////////////////////////////////////////////////
 
//       Выбираем из массивов данные по $url         //
 
////////////////////////////////////////////////////////////
 
$description = array_search($url, $array_d);  
$title = array_search($url, $array_t);  
$keywords = array_search($url, $array_k);  
 
?>

Всего записей: 1356 | Зарегистр. 14-03-2014 | Отправлено: 18:20 18-05-2017 | Исправлено: Kaber, 18:21 18-05-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Kaber
к чему такие сложности, если можно сделать все еще проще?

Код:
$data = [
'/' => [
  'title'           => 'Заголовок /',
  'description' => 'Описание /',
  'keywords'   => ['ключевые', 'слова']
],
'/kontakty/' => [
  'title'           => 'Заголовок /kontakty/',
  'description' => 'Описание /kontakty/',
  'keywords'   => ['ключевые', 'слова']
],
];
$info = isset($data[$url]) ? $data[$url] : ['title' => 'Нет заголовка', 'description' => 'Нет описания', 'keywords' => []];

 

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:18 18-05-2017 | Исправлено: Mavrikii, 21:19 18-05-2017
clockot

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А кто может поделиться опытом разработки,  можете подробнее рассказать сколько времени у вас ушло на создание, и изучение основ сайтостроения? Читаю сейчас в интернете статью про семантическое ядро , и уже на ранних этапах понимаю что не смогу нужный мне сайт сделать самостоятельно. Придется наверное делать [url=https://***.ru]заказ сайтов[/url]




Спам

Всего записей: 2 | Зарегистр. 22-07-2016 | Отправлено: 14:12 21-07-2017
SerV2003

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

Всего записей: 177 | Зарегистр. 24-11-2007 | Отправлено: 15:11 08-11-2017 | Исправлено: SerV2003, 15:56 08-11-2017
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SerV2003
Ну для кого красным в шапке выделено??
WordPress

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 15:54 08-11-2017
MishNSK



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сразу извиняюсь если не та тема, но я ооочень далёк от этого.  
Хочу посоветоваться. Подскажите аналог "openserver", самый простой, желательно портативный. Задача - запускать локально (не знаю как правильно сказать) .php. Чтоб поддерживал апач и php. Ничего разрабатывать не собираюсь, поэтому ищу самый постой вариант.  

Всего записей: 768 | Зарегистр. 08-10-2012 | Отправлено: 20:10 14-01-2019
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MishNSK
прочитайте внимательно название темы.
"аналог" зависит от используемой OS
Windows:
https://ru.wikipedia.org/wiki/WampServer
Джентльменский набор Web-разработчика / Denwer

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 20:30 14-01-2019
spidometrs

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Приветствую, всех!
 
Есть контент, который набирается в редакторе, пишется в базу и выглядит в итоге так:
 
<p>
    Продается <a href="https://site.com">мотик</a> не <strong>битый</strong> не крашеный.
</p>
<p>
    https://site.com/index.php/2.html
</p>
 
То есть перенос строки осуществляется с помощью парного тега p.
 
$goods_body - переменная, контента из базы, которая содержит этот контент.
 
Есть код, который обрабатывает вывод:
preg_replace('/(?:<|&lt;).*?(?:>|&gt;)/', '', $goods_body)
 
Хочу получить контент без html тегов, без https:// и без http:// с переносом строки.
 
В итоге я получаю контент без html тегов, с https:// в тексте, переноса строки конечно нет, а два предложения склеенные после точки первого предложения:
 
Продается мотик не битый не крашеный.https://site.com/index.php/2.html
 
Нужно как-то убирая теги </p> вместо его вставлять <br/>, убрать из текста https://, и склеивать site.com в sitecom
 
PHP7.2
 
Может кто такое осилить?

Всего записей: 101 | Зарегистр. 10-01-2008 | Отправлено: 01:06 01-05-2019 | Исправлено: spidometrs, 01:19 01-05-2019
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
spidometrs
перечитайте тему, о чем она. тут предлагают решения, а не ищут их.

Цитата:
Может кто такое осилить?

strip_tags функция.
а для остального лучше пример конечного результата показать. и не тут, а в теме Основы PHP...

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 02:27 01-05-2019
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Прриветствую форумчане, простите что пишу не в ту ветку (наверное), но запарился искать по просторам тырнета библиотеку php_com_dotnet.dll для последней версии пыхи. Подскажите где мне её надыбать?

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 11:53 17-10-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ArkadyKiller
1) последняя версия это несколько расплывчато, учитывая наличие php5, php7, php8, версий ts, x64
2) соберите сами

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 12:03 17-10-2022 | Исправлено: Mavrikii, 12:03 17-10-2022
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
 
 
Версия 8 ts. помоги найти файл?

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 13:09 17-10-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ArkadyKiller
https://windows.php.net/download/

Цитата:
VS16 x86 Thread Safe (2022-Sep-28 11:46:36)

в архиве есть и это расширение

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:04 17-10-2022
ArkadyKiller



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

Цитата:
VS16 x86 Thread Safe (2022-Sep-28 11:46:36)
 
в архиве есть и это расширение

Mavrikii
а в 64 ts нету, пчму? или они только под 86 заточены?
 
 
народ! простите меня за невнимательность. Как оказалось все есть в архиве. Пчму мне было не по глазам я не понимать. Простите

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 11:23 20-10-2022 | Исправлено: ArkadyKiller, 11:26 20-10-2022
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Ребят ай нид хелп. в общем установил все как надо, но........... команда php --ini не подключает файл ini из папки includes= или из своей корневой. Только свой счобственный php.ini, а мне нужно чтобы подхватил файл pear.ini. Кто сталкивался с таким и как решал?

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 18:33 08-04-2023
Mavrikii

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

Цитата:
команда php --ini не подключае

https://stackoverflow.com/questions/2180197/pear-on-windows-how-to-change-pear-ini-location
https://blog.chudinov.net/how-to-change-location-of-the-pear-ini-for-php-5-4-and-5-5-on-windows/

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 12:30 10-04-2023
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
 с этим пунктом все ок
 
А вот с первым пунктом тоже все переменные установлены. если примеры из браузера делать то PEAR срабатывает.   но вот команда php --ini пчму то не видит файл pear.ini или он и не должен его видеть?
 
 
Windows PowerShell
(C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
 
PS C:\Users\Администратор> php --ini
Configuration File (php.ini) Path:
Loaded Configuration File:         D:\PHP\php.ini
Scan for additional .ini files in: (none) - вот тут должен быть pear.ini?
Additional .ini files parsed:      (none) - или тут?
PS C:\Users\Администратор>

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 06:30 11-04-2023 | Исправлено: ArkadyKiller, 06:32 11-04-2023
Mavrikii

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

Цитата:
если примеры из браузера делать то PEAR срабатывает.   но вот команда php --ini пчму то не видит файл pear.ini или он и не должен его видеть?

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

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 19:05 13-04-2023
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
то есть по команде php --ini он pear.ini и не должен там появляться ?

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 06:33 14-04-2023
Mavrikii

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

Цитата:
то есть по команде php --ini он pear.ini и не должен там появляться ?

зависит от того, что и откуда читает. где прописана загрузка, тот ли php.ini читается.
 
модифицировали этот ini?

Цитата:
Loaded Configuration File:         D:\PHP\php.ini

 

Цитата:
Scan for additional .ini files in: (none) - вот тут должен быть pear.ini?
Additional .ini files parsed:      (none) - или тут?

https://stackoverflow.com/questions/27041266/xampp-scan-this-dir-for-additional-ini-files

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 06:39 14-04-2023
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
ну там пишут что можно использовать переменную PHP_INI_SCAN_DIR для указания места хранения файлов ini. Но... У меня на всякий случай ini лежит в папке где лежит сам php.ini.
 
Прописал переменную PHP_INI_SCAN_DIR на D:\PHP\ будем посмотреть, позже отпишусь
 
Проверь ссылку правильно все?
 
 
Windows PowerShell
(C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
 
PS C:\Users\Администратор> php --ini
PHP:  syntax error, unexpected '{' in D:\PHP\pear.ini on line 2
Cannot load the ionCube PHP Loader - it was already loaded
Cannot load Zend OPcache - it was already loaded
 
так надо изменить на папку другую. ща переделаю путь туда куда нужно

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 08:44 14-04-2023 | Исправлено: ArkadyKiller, 08:57 14-04-2023
Mavrikii

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

Цитата:
PHP:  syntax error, unexpected '{' in D:\PHP\pear.ini on line 2

ошибка во второй строке.
 

Цитата:
Проверь ссылку правильно все?

зачем? это определяется тем, как работает. никто же не помнит все наизусть.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 09:15 14-04-2023
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
строка вторая конфига
 

Код:
a:18:{s:15:"preferred_state";s:6:"stable";s:8:"temp_dir";s:12:"D:\PEAR\tmp\";s:12:"download_dir";s:12:"D:\PEAR\tmp\";s:7:"bin_dir";s:8:"D:\PEAR\";s:7:"php_dir";s:13:"D:\PEAR\pear\";s:7:"doc_dir";s:13:"D:\PEAR\docs\";s:8:"data_dir";s:13:"D:\PEAR\data\";s:7:"cfg_dir";s:12:"D:\PEAR\cfg\";s:7:"www_dir";s:12:"D:\PEAR\www\";s:7:"man_dir";s:12:"D:\PEAR\man\";s:8:"test_dir";s:14:"D:\PEAR\tests\";s:7:"php_bin";s:14:"D:\PHP\php.exe";s:10:"__channels";a:3:{s:5:"__uri";a:0:{}s:11:"doc.php.net";a:0:{}s:12:"pecl.php.net";a:0:{}}s:10:"sig_keydir";s:16:"D:\PEAR\pearkeys";s:7:"php_ini";s:14:"D:\PHP\php.ini";s:7:"ext_dir";s:11:"D:\PHP\ext\";s:9:"cache_dir";s:17:"D:\PEAR\tmp\cache";s:12:"metadata_dir";s:17:"D:\PEAR\metadata\";}

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 10:08 14-04-2023 | Исправлено: ArkadyKiller, 10:16 14-04-2023
Mavrikii

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

Цитата:
строка вторая конфига

не должно быть там никакой сериализированной записи.
 
там все только такого вида

Цитата:
; any text on a line after an unquoted semicolon (;) is ignored
[php] ; section markers (text within square brackets) are also ignored
; Boolean values can be set to either:
;    true, on, yes
; or false, off, no, none
register_globals = off
track_errors = yes
 
; you can enclose strings in double-quotes
include_path = ".:/usr/local/lib/php"
 
; backslashes are treated the same as any other character
include_path = ".;c:\php\lib"

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 10:12 14-04-2023 | Исправлено: Mavrikii, 10:12 14-04-2023
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
ну как есть, файл pear.ini именно такое содержит
 
php.ini у меня правильный все кошерно
 
Добавлено:
a:18:
{s:15:"preferred_state";s:6:"stable";
s:8:"temp_dir";s:12:"D:\PEAR\tmp\";
s:12:"download_dir";s:12:"D:\PEAR\tmp\";
s:7:"bin_dir";s:8:"D:\PEAR\";
s:7:"php_dir";s:13:"D:\PEAR\pear\";
s:7:"doc_dir";s:13:"D:\PEAR\docs\";
s:8:"data_dir";s:13:"D:\PEAR\data\";
s:7:"cfg_dir";s:12:"D:\PEAR\cfg\";
s:7:"www_dir";s:12:"D:\PEAR\www\";
s:7:"man_dir";s:12:"D:\PEAR\man\";
s:8:"test_dir";s:14:"D:\PEAR\tests\";
s:7:"php_bin";s:14:"D:\PHP\php.exe";
s:10:"__channels";a:3:{s:5:"__uri";
a:0:{}s:11:"doc.php.net";
a:0:{}s:12:"pecl.php.net";
a:0:{}}s:10:"sig_keydir";s:16:"D:\PEAR\pearkeys";
s:7:"php_ini";s:14:"D:\PHP\php.ini";
s:7:"ext_dir";s:11:"D:\PHP\ext\";
s:9:"cache_dir";s:17:"D:\PEAR\tmp\cache";
s:12:"metadata_dir";s:17:"D:\PEAR\metadata\";}
 
это строка конфига в pear.ini
 
все делалось по инструкции с оффсайта

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 10:17 14-04-2023 | Исправлено: ArkadyKiller, 10:22 14-04-2023
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ArkadyKiller
а, это pear.ini и нужно так, то должно подряд, без переносов.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 10:36 14-04-2023
ArkadyKiller



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Mavrikii
вот он у меня подряд без перекосов, одной строкой, вот на него команда php --ini и ругается что ошибка в строке 2 ругается на символ {

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 10:55 14-04-2023 | Исправлено: ArkadyKiller, 10:55 14-04-2023
Mavrikii

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

Цитата:
и ругается что ошибка в строке 2 ругается на символ {

значит не одной строкой, раз ругается на 2?

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 11:18 14-04-2023
ArkadyKiller



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

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 12:14 14-04-2023
b7music



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
ArkadyKiller
https://beautifytools.com/php-beautifier.php
и станет ясно где что пропущено

Всего записей: 672 | Зарегистр. 04-03-2010 | Отправлено: 07:59 22-06-2023
ArkadyKiller



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

Всего записей: 659 | Зарегистр. 28-09-2006 | Отправлено: 19:36 30-06-2023
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум 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