Ru-Board.club
← Вернуться в раздел «Web-программирование»

» PHP: Полезные (интересные и оригинальные) решения

Автор: Delphi6
Дата сообщения: 12.01.2008 22:18
Вот еще сегодня вспомнил про конструкцию FOR о которой многие просто забывают (в том числе и я ) но на самом деле FOR цикл в РНР очень гибкий, вот допустим надо перебрать элементы массива, можно было банально инициализировать переменную счетчика вот так

Код: $i = 1;
while (isset($settings['question'.$i])) {
// делаем разные вещи
$i += 1;
}
Автор: Cheery
Дата сообщения: 12.01.2008 22:21
Delphi6

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

}

Автор: Delphi6
Дата сообщения: 13.01.2008 08:17
Cheery

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

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

Код: for ($i=1; $i<=10; $i++) {
}
Автор: MaxIkar
Дата сообщения: 13.01.2008 20:04
Delphi6
Название топика (читаем вдумчиво): PHP: Полезные (интересные и оригинальные) решения

Цитата:

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


...а это даже не решение
Автор: Delphi6
Дата сообщения: 13.01.2008 21:23
MaxIkar

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

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

Ну а нас счет комента:

1) п. 2.16. главы VIII Соглашения по использованию

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

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

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

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

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

Цитата:

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

Автор: MaxIkar
Дата сообщения: 14.01.2008 19:26

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

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


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

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


Цитата:
Ну а нас счет комента:

1) п. 2.16. главы VIII Соглашения по использованию

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


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


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

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

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



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


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

А эта тема именно для поиска решений

Сорри за оффтоп, предлагаю продолжать в ПМ
Автор: Cheery
Дата сообщения: 14.01.2008 19:42
2All
Дальнейшие "претензии" только в ПМ!
Автор: Ternik
Дата сообщения: 23.01.2008 01:53
предлагаю полезное решение для всех проблем по 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;
}
}
}

?>
Автор: Brodyaga
Дата сообщения: 26.01.2008 12:12
Ternik


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


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

Т.е. каждый аттач инициирует вызов mimes.php? Таки не совсем полезно.
Автор: Delphi6
Дата сообщения: 13.02.2008 21:19
Ternik
Спасибо действительно хороший класс, давно хотел увидеть на практике как реализуется прикрепление атачмента (мне правда мне на практике нужно сделать наоборот отделить атачмент). Вот только не пойму зачем у вас список MIME типов? ведь у РНР есть спец. функция для этих целей fileinfo()
Автор: Delphi6
Дата сообщения: 16.03.2008 13:30
Как лучше хранить несколько чисел в одном столбце. Если размер для вас имеет значение, вместо банального 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;
}
Автор: 6epcepk
Дата сообщения: 19.03.2008 16:57
Потребовался механизм загрузки картинок из Маркет.Яндекс продукции.
Насколько это хорошо или плохо я вдаваться не стал, но нижеперечисленный код вроде работает.
[more=Полный код с примерами.]
Код: <?php ## by 6epcepk

// set_time_limit(0);

$data = array(
array(
'title' => 'Logitech Revolution',
'price' => '3000'
), array(
'title' => 'Logitech MX500',
'price' => '1500'
), array(
'title' => 'Nokia N93',
'price' => '15 000'
), array(
'title' => 'Nokia 7610',
'price' => '13 000'
), array(
'title' => 'Novex NCD-103',
'price' => '34 000'
), array(
'title' => 'Akai E304',
'price' => '25 000'
)
);

echo '<table>';
echo '<tr>';
echo '<td>Title</td>';
echo '<td>Price</td>';
echo '<td>Image</td>';
echo '</tr>';

foreach ($data as $value) {

echo '<tr>';
echo '<td>' . $value['title'] . '</td>';
echo '<td>' . $value['price'] . '</td>';
echo '<td><a href="' . get_search_results($value['title']) . '" target="_blank">See image</a></td>';
echo '</tr>';

}

echo '</table>';

function get_search_results($search_str = '') {

$search_str = str_replace(' ', '+', $search_str);

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://market.yandex.ru/search.xml?cvredirect=1&text=' . $search_str);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HEADER, 1);
$html = curl_exec($curl);
curl_close($curl);

return get_search_results_page($html);

}

function get_search_results_page($html) {

preg_match('#hid=([0-9]+)&amp;modelid=([0-9]+)(.*)#', $html, $matches);
if (empty($matches[1])) preg_match('#hid=([0-9]+)&modelid=([0-9]+)(.*)#', $html, $matches);

if (!empty($matches[1])) {

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://market.yandex.ru/model.xml?hid=' . $matches[1] . '&modelid=' . $matches[2]);

curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$html = curl_exec($curl);
curl_close($curl);

return get_image($html);

} else {

return get_image($html);

}

}

function get_image($html) {

preg_match('#i?ctype=1&amp;path=(.*?)"#', $html, $matches);

if (!empty($matches[1])) {

return 'http://data.yandex.ru/i?ctype=1&path=' . $matches[1];

} else {

return false;

}

}


?>

<style type="text/css">
table {
border-collapse: collapse;
margin-top: 10px;
}
table td {
border: 1px solid #d3d4d5;
padding: 3px 5px;
width: 25%;
}
table td.header {
border: 1px solid #d3d4d5;
padding: 3px 5px;
width: 25%;
background: #eae8e8;
}
table td.category {
border: 1px solid #d3d4d5;
padding: 3px 5px;
background: #f4f3f3;
}
table td.category a {
color: #808080;
}
table tr:hover {
background: #f2f5fd;
}

a {
color: #224db3;
text-decoration: none;
}
a:hover {
color: #0536ab;
background: #e5ecfe;
text-decoration: underline;
}

</style>
Автор: TERROR666
Дата сообщения: 13.04.2008 23:17
ГЕНЕРАТОР ПАРОЛЕЙ
$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);
}
Автор: Delphi6
Дата сообщения: 16.04.2008 05:11
Вот решил поделиться куском кода который украшает программу (повышает читабельность):

Код: function TrimLine($line) {
return trim($line);
}

$fileLines = file('./input.txt');
var_dump(array_map('TrimLine', $fileLines));
Автор: Cheery
Дата сообщения: 16.04.2008 05:16
Delphi6

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

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

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


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

нет
это просто
if ($dig) $main=array_merge($main,$dig);
Автор: Delphi6
Дата сообщения: 16.04.2008 07:19
Cheery

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

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

Код: $fileLines = file('./input.txt');
var_dump(array_map('trim', $fileLines));
Автор: zerkms
Дата сообщения: 16.04.2008 07:40

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

нет, не таков


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

всё тут: http://www.php.net/manual/ru/language.operators.php

ps: оффтоп это всё
Автор: Cheery
Дата сообщения: 16.04.2008 17:34
Delphi6
не будем флеймить, да?
плюс код все равно нерабочий - есть ошибки.
например перекрытие $dig как аргумента и переменной внутри функции
Автор: Delphi6
Дата сообщения: 16.04.2008 18:00
Прошу прошения за флуд. Подумав немного сообразил что это тоже самое что:

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

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

п.с. кстати это тоже можно расценивать как оригинальный способ использовать =?: конструкцию
Автор: JonJonson
Дата сообщения: 17.04.2008 05:00
Delphi6, плохо вы смотрели там есть ссылка на http://www.php.net/manual/ru/language.operators.comparison.php
Да и ниже в таблице порядка выполнения операторов упоминается ?:
Автор: Ser5
Дата сообщения: 20.04.2008 22:46
[more=Гибкая проверка IP-адресов.]

Код:
<?php
    /**
     * Гибкая проверка IP-адресов по маске.
     *
     * Маска может выглядеть как обычный IP-адрес:
     * <b>192.168.0.1</b>
     *
     * Любая из четырёх частей маски может содержать несколько значений,
     * разделённых запятыми:
     * <b>192.168.0.1,2,3,4,5</b>
     *
     * Того же значения можно добиться использованием диапазонов:
     * <b>192.168.0.1-5</b>
     *
     * Диапазоны можно комбинировать с использованием запятых:
     * <b>192.168.0.1,3,5,10-20,30-100,105,200</b>
     *
     * Звёздочка, поставленная вместо какой-либо части маски,
     * обозначает любое значение:
     * <b>192.168.*.*</b>
     *
     * @package s5core
     */
    class S5_Net_IPsChecker {
        private $allowedIPs = array();
        
        /**
         * Конструктор.
         *
         * Принимает список масок IP-адресов, например:
         * <code>
         * new S5_Net_IPsChecker("1.1.1.1", "1.1.1.10", "1.1.1.50-60");
         * </code>
         *
         * или в виде массива:
         * <code>
         * new S5_Net_IPsChecker(array("1.1.1.1", "1.1.1.10", "1.1.1.50-60"));
         * </code>
         */
        public function __construct () {
            if (func_num_args() == 0) throw new InvalidArgumentException("Должна быть передана хотя бы одна маска.");
            $param1 = func_get_arg(0);
            if (is_array($param1)) {
                $this->allowedIPs = $param1;
            } else {
                $this->allowedIPs = func_get_args();
            }
            if (count($this->allowedIPs) == 0) throw new InvalidArgumentException("Должна быть передана хотя бы одна маска.");
            foreach ($this->allowedIPs as $ip) {
                static $ap = '[\d,*-]{1,}';
                if (!preg_match("|^$ap\\.$ap\\.$ap\\.$ap$|", $ip)) {
                    throw new InvalidArgumentException("Аргумент $ip не является правильной маской.");
                }
            }
        }
        
        /**
         * Проверка IP-адреса, заданного четырьмя целыми числами.
         *
         * Пример:
         * <code>
         * $ipc->check(192, 168, 0, 1);
         * </code>
         *
         * @param integer $ip1 Первая часть IP-адреса.
         * @param integer $ip2 Вторая часть IP-адреса.
         * @param integer $ip3 Третья часть IP-адреса.
         * @param integer $ip4 Четвёртая часть IP-адреса.
         * @return boolean
         */
        public function check ($ip1, $ip2, $ip3, $ip4) {
            $four_test_parts = array($ip1, $ip2, $ip3, $ip4);
            for ($ipx=0; $ipx < count($this->allowedIPs); $ipx++) {
                //Сравниваем переданный адрес с одной из масок.
                if ($this->checkSingleMask($this->allowedIPs[$ipx], $four_test_parts)) {
                    return true;
                }
            }
            //Цикл по маскам завершился. Если мы попали сюда, это означает,
            //что проверки всех масок провалались.
            return false;
        }
        
        private function checkSingleMask ($mask, $four_test_parts) {
            //4 части: 192, 198, 0, 1
            $four_allowed_parts = explode('.', $mask);
            for ($part_ix=0; $part_ix<4; $part_ix++) {
                //Если часть не прошла проверку, то вся маска тоже проверку не прошла.
                if (!$this->checkSinglePart($four_allowed_parts[$part_ix], $four_test_parts[$part_ix])) {
                    return false;
                }
            }
            //Все четыре части маски прошли проверку,
            //значит проверка всей маски удалась. Можно возвращать true.
            return true;
        }
        
        private function checkSinglePart ($allowed_part, $test_part) {
            //Если часть - звёздочка, то проверку можно пропустить,
            //она считается верной в любом случае.
            if ($allowed_part == '*') {
                return true;
            } else {
                //Разрешённые диапазоны, которые через запятую,
                //содержащиеся в одной из частей.
                $allowed_ranges = explode(',', $allowed_part);
                //Проход по диапазонам.
                for ($range_ix = 0; $range_ix < count($allowed_ranges); $range_ix++) {
                    if ($this->checkSingleRange($allowed_ranges[$range_ix], $test_part)) {
                        return true;
                    }
                }
                return false;
            }
        }
        
        private function checkSingleRange ($range, $test_part) {
            //Берём один из разрешённых диапазонов
            if (strpos($range, '-')) {
                $min_max = explode('-', $range);
                $min = (int)$min_max[0];
                $max = (int)$min_max[1];
                //Если число попало в диапазон, остальные составляющие диапазона можно не проверять,
                //ведь часть сошлась.
                if ($test_part >= $min and $test_part <= $max) return true;
            } else {
                if ($test_part == $range) return true;
            }
            return false;
        }
        
        /**
         * IP-адрес для проверки в виде строки "192.168.0.1"
         *
         * @param string $testIP
         * @return boolean
         */
        public function checkString ($testIP) {
            $parts4 = explode('.', $testIP);
            return $this->check($parts4[0], $parts4[1], $parts4[2], $parts4[3]);
        }
        
        /**
         * IP-адрес для проверки в виде упакованного длинного целого,
         * подходящего для обработки функцией long2ip().
         *
         * @param long $testIP
         * @return boolean
         */
        public function checkPacked ($testIP) {
            return $this->checkString(long2ip($testIP));
        }
    }
?>
Автор: 6epcepk
Дата сообщения: 19.05.2008 12:48
Написана функция, позволяющая добавлять в начало числа нули (аналог 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
Автор: andymc
Дата сообщения: 19.05.2008 21:04
6epcepk
Предлагаю более универсальный способ, который учитывает уже имеющиеся функции.

Код: str_pad('13', 5, '0', STR_PAD_LEFT)
Автор: rusneftesnab
Дата сообщения: 20.05.2008 10:37
Хотелось - бы понять правильность кодов http://www.***.ru
Автор: romka777
Дата сообщения: 20.05.2008 12:03

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

Код:str_pad('13', 5, '0', STR_PAD_LEFT)

дополнить строку 13 слева нулями до длины 5.



Код: sprintf("%05d", $str)
Автор: zerkms
Дата сообщения: 20.05.2008 14:19
romka777
$arr = array_map('intval', $arr);
Автор: vitcom2
Дата сообщения: 26.05.2008 00:53
не помню откуда, но думаю кому нить пригодиться


СУММА ПРОПИСЬЮ

<?
// Функция парсирования триады
// $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;
}
?>
Автор: grek912
Дата сообщения: 19.06.2008 08:20
Народ подскажите пожалуйста.
Короче в скрипте прописана отправка сообщений на мыло через SMTP сервер простой командой mailto мне надо как то это переписать чтобы скрипт авторизировался на SMTP сервере и с него отправлял потому что хостинг не разрешает не авторизируясь отправлять. Заранее спасибо
Автор: MaxIkar
Дата сообщения: 19.06.2008 09:49
http://pear.php.net/package/Mail

Страницы: 12345678910

Предыдущая тема: Perl: Полезные решения


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.