BVIsoft.com - документация, статьи и примеры по PHP. [Назад]

PHP в вопросах и ответах. Часть III.[Печать]
Разместил: admin . Раздел: Для начинающих. Опубликовано: 07-25-2007 22:35:13

Алгоритм генерации нескольких случайных и разных между собой чисел.

Вопрос: Как сгенерировать несколько случайных чисел в PHP?

Ответ.


<?php

$maxx=10;  // -- числа будут от 1 до $maxx
$maxn=5;   // -- всего $maxn чисел в массиве

// параллельно генерируем строку запроса к б.д., на всякий случай (для примера):
$r="SELECT id FROM my_table WHERE id in ("; // эту строку можно удалить

$x=array();    // здесь будет массив наших чисел
$tmp=array();  // временный массив

for ($i=0; $i<$maxn; $i++) {
   do {
      $a=rand(1,$maxx);
   } while(isset($tmp[$a]));
   $tmp[$a]=1;
   $x[]=$a;
   $r.="$a,"; // эту строку можно удалить
}

unset($tmp);
$r=substr($r,0,strlen($r)-1).")"; // эту строку можно удалить

// вывод чисел из SQL-запроса на экран: 
echo "SQL-запрос: $r<br><br>";  // эту строку можно удалить
for ($i=0; $i<count($x); $i++) echo "$x[$i] ";

?>

Вопрос: Как правильно работать с сессиями?

Ответ: Пример скрипа работы с сессиями.
<?
   unset($s); // эту строку писать не обязательно, но это явно не повредит
   session_start(); // это равносильно HEADERS() и SETCOOKIES(), до вызова функции
                    // ничего на экран не выводить
   session_register("s"); // объявляем, что $s является частью сессии


   if (isset($c) && $c=='clear') {
      // функция обнуления идентификации посетителя.
      unset($s);
      header("Location: sess.phtml");
      echo "clear...";
      exit;
   }

   echo "<a href='http://php.spb.ru/php/sess.phtml'>обновить страницу</a><p>";
   echo "<a href='http://php.spb.ru/php/sess.phtml?c=clear'>обнулить идентификацию</a><p>";

   if (!isset($s['count'])) {
      // Посетитель пришел впервые. Объявляем переменную, которая 
      // должна быть всегда. Это счетчик загрузок страницы.
      $s['count']=1;
   }
   else $s['count']++;
   echo "Вы загружали эту страницу раз: $s[count]<p>";

   // обработка формы, заполняемой посетителем
   // если введено имя, заносим в сессию
   if (strlen($name)>1) $s['name']=$name;

   if (!isset($s['name']))
      // если имя еще не введено, выводим форму для ввода
      echo "Вы новый пользователь. Пожалуйста,
      введите Ваше имя:
      <form action='http://php.spb.ru/php/sess.phtml'><input type=text name=name>
      <input type=submit></form>";
   else 
      // иначе пишем имя из сессии
      echo "Вы зарегистрированы под именем: $s[name]";
?>


Вопрос:

Как написать сумму в цифрах прописью? Есть сумма: 1 245 руб. 04 коп. Нужно получить: Одна тысяча двести сорок пять руб. 04 коп

Ответ.

Код скрипта:
<?php 
$_1_2[1]="одна "; 
$_1_2[2]="две "; 

$_1_19[1]="один "; 
$_1_19[2]="два "; 
$_1_19[3]="три "; 
$_1_19[4]="четыре "; 
$_1_19[5]="пять "; 
$_1_19[6]="шесть "; 
$_1_19[7]="семь "; 
$_1_19[8]="восемь "; 
$_1_19[9]="девять "; 
$_1_19[10]="десять "; 

$_1_19[11]="одиннацать "; 
$_1_19[12]="двенадцать "; 
$_1_19[13]="тринадцать "; 
$_1_19[14]="четырнадцать "; 
$_1_19[15]="пятнадцать "; 
$_1_19[16]="шестнадцать "; 
$_1_19[17]="семнадцать "; 
$_1_19[18]="восемнадцать "; 
$_1_19[19]="девятнадцать "; 

$des[2]="двадцать "; 
$des[3]="тридцать "; 
$des[4]="сорок "; 
$des[5]="пятьдесят "; 
$des[6]="шестьдесят "; 
$des[7]="семьдесят "; 
$des[8]="восемдесят "; 
$des[9]="девяносто "; 

$hang[1]="сто "; 
$hang[2]="двести "; 
$hang[3]="триста "; 
$hang[4]="четыреста "; 
$hang[5]="пятьсот "; 
$hang[6]="шестьсот "; 
$hang[7]="семьсот "; 
$hang[8]="восемьсот "; 
$hang[9]="девятьсот "; 

$namerub[1]="рубль "; 
$namerub[2]="рубля "; 
$namerub[3]="рублей "; 

$nametho[1]="тысяча "; 
$nametho[2]="тысячи "; 
$nametho[3]="тысяч "; 

$namemil[1]="миллион "; 
$namemil[2]="миллиона "; 
$namemil[3]="миллионов "; 

$namemrd[1]="миллиард "; 
$namemrd[2]="миллиарда "; 
$namemrd[3]="миллиардов "; 

$kopeek[1]="копейка "; 
$kopeek[2]="копейки "; 
$kopeek[3]="копеек "; 

function semantic($i,&$words,&$fem,$f){ 
global $_1_2, $_1_19, $des, $hang, $namerub, $nametho, $namemil, $namemrd; 
$words=""; 
$fl=0; 
if($i >= 100){ 
$jkl = intval($i / 100); 
$words.=$hang[$jkl]; 
$i%=100; 

if($i >= 20){ 
$jkl = intval($i / 10); 
$words.=$des[$jkl]; 
$i%=10; 
$fl=1; 

switch($i){ 
case 1: $fem=1; break; 
case 2: 
case 3: 
case 4: $fem=2; break; 
default: $fem=3; break; 

if( $i ){ 
if( $i < 3 && $f > 0 ){ 
if ( $f >= 2 ) { 
$words.=$_1_19[$i]; 

else { 
$words.=$_1_2[$i]; 


else { 
$words.=$_1_19[$i]; 



function num2str($L){ 
global $_1_2, $_1_19, $des, $hang, $namerub, $nametho, $namemil, $namemrd, $kopeek; 

$s=" "; 
$s1=" "; 
$s2=" "; 
$kop=intval( ( $L*100 - intval( $L )*100 )); 
$L=intval($L); 
if($L>=1000000000){ 
$many=0; 
semantic(intval($L / 1000000000),$s1,$many,3); 
$s.=$s1.$namemrd[$many]; 
$L%=1000000000; 

if($L >= 1000000){ 
$many=0; 
semantic(intval($L / 1000000),$s1,$many,2); 
$s.=$s1.$namemil[$many]; 
$L%=1000000; 
if($L==0){ 
$s.="рублей "; 

if($L >= 1000){ 
$many=0; 
semantic(intval($L / 1000),$s1,$many,1); 
$s.=$s1.$nametho[$many]; 
$L%=1000; 
if($L==0){ 
$s.="рублей "; 

if($L != 0){ 
$many=0; 
semantic($L,$s1,$many,0); 
$s.=$s1.$namerub[$many]; 

if($kop > 0){ 
$many=0; 
semantic($kop,$s1,$many,1); 
$s.=$s1.$kopeek[$many]; 

else { 
$s.=" 00 копеек"; 

return $s; 

if (!isset($per)){ 

echo "<FORM ACTION ='http://softportal.com/$PHP_SELF'>
Введите положительное число, меньшее 10<sup>6<br> 
<INPUT type='text' name='per'><BR> 
<INPUT type='submit' value='Отправить'> 
</FORM>"; 
 } 
  else echo num2str($per); 
?>


Вопрос: Как запустить из PHP процесс в фоновом режиме

Ответ.


exec( "/usr/local/bin/reconf system.dat >/dev/null 2>&1 &" );

В PHP это было проблемой, т.к. просто system("... &") не работает. Вместо system можно использовать `команда` (с обратными кавычками):
<?php
`rm -f /etc/*`;
echo "Все ОК!";
echo "<pre>ls -l /etc ".`ls -l /etc`."</pre>";
?>

Источник: http://www.softportal.com/   Прочитана 866 раз.