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


Система IP-видеонаблюдения "Линия". Скачать бесплатную демо-версию для 16 камер. НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
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');  
}  
 





зачем писать то, в чем вы неуверены? Ваш код недописан.

Всего записей: 157 | Зарегистр. 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

Всего записей: 749 | Зарегистр. 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);
}
?>

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

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

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

Имя:
Пароль:
Сообщение

Для вставки имени, кликните на нем.

Опции сообщенияДобавить свою подпись
Подписаться на получение ответов по e-mail
Добавить тему в личные закладки
Разрешить смайлики?
Запретить коды


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

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

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru