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

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

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

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

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

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
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/

Всего записей: 1313 | Зарегистр. 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
Открыть новую тему     Написать ответ в эту тему

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

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


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

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru