Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Ответы на вопросы из уроков по php [4]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (5): « 1 2 3 [4] 5 » 

> Без описания
caballero
Отправлено: 04 Июня, 2013 - 21:26:12
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




там где php установлен
(Добавление)
вообще странно заниматся програмированием тому кто не умеет работать пользователем компа в частности искать файлы
начни с книги ПК для чайников или типа того


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
riosteyn
Отправлено: 05 Июня, 2013 - 16:26:54
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Май 2013  


Помог: 0 раз(а)




caballero, он поиском не пробивается, гений.
 
 Top
DelphinPRO
Отправлено: 05 Июня, 2013 - 17:32:43
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




riosteyn пишет:
Подскажите, где найти файл php.ini?) в 9 уроке туда нужно строку добавить...
Это зависит от того в каком окружении вы работаете. Дефолтное расположение - в каталоге установки php. В Windows может располагаться в c:\windows\php.ini
Во всяких-разных WAMP-ах иногда в совершенно непредсказуемых местах.
(Добавление)
riosteyn пишет:
поиском не пробивается

если файл есть - поиск его найдет.
(Добавление)
как вариант - посмотреть вывод функции phpinfo()


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Lana
Отправлено: 30 Июня, 2014 - 01:16:43
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Привет!
Для таких же новичков как и я выкладываю результаты своего шаманства по уроку № 8. Конструктивная критика приветствуется.

3. Напишите скрипт, считывающий из файла f1.bmp строки, сортирующий их и отсортированный результат запишите в файл f1.mp3.
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. $aF1 = file('f1.bmp');
  4. $F1_mp3 = fopen('f1.mp3', 'w');
  5. sort($aF1);
  6. foreach ($aF1 as $num => $f1) {
  7.         fwrite($F1_mp3, $f1);  
  8. }
  9. fclose($F1_mp3);
  10.  
  11. ?>

4. Напишите скрипт, выводящий на экран дерево каталога /usr и пропускающий файлы, в которые запрещена запись. Подсказка: Для этого вспомните рекурсию.
Дерево должно иметь вид, например, такой:
/usr/
--local/
----etc/
----bin/
--home/
----myfolder/
--------my_file
PHP:
скопировать код в буфер обмена
  1.  <?PHP
  2.  
  3.  function printdir_1($dir, $tab)
  4. {
  5.         echo $tab.$dir."/<br>";
  6.         $tab .= '--';
  7.         $handle = opendir($dir);
  8.         while (false !== ($name = readdir($handle))) {
  9.                 if ( $name == "." or $name == ".." ) continue;
  10.                 if (is_dir($dir.'/'.$name)) {
  11.                         $newdir = $dir.'/'.$name;
  12.                         printdir_1($newdir, $tab);
  13.                 }
  14.                 elseif ( is_file($dir.'/'.$name) && is_writable($dir.'/'.$name))
  15.                 {
  16.                         echo $tab.$name."<br>";
  17.                 }              
  18.         else    echo $tab.$name. "-- is unknown hren' <br> ";          
  19.     }
  20. closedir($handle);
  21. }
  22.  
  23. $dir = '/usr';
  24. $tab = '';
  25. printdir_1($dir, $tab);
  26.  
  27. /*      VARIANT #2      */
  28. function printdir_2($dir, $tab)
  29. {
  30.         echo $tab.$dir."<br>";
  31.         $tab .= '--';
  32.         $arDir = scandir($dir);
  33.         foreach ($arDir as $key => $name)
  34.         {
  35.                 if ( $name == "." or $name == ".." ) continue;
  36.                 if (is_dir($dir . '/' . $name))
  37.                 {
  38.                         $newdir = $dir . '/' . $name;
  39.                         printdir_2($newdir, $tab);
  40.                 }
  41.                 elseif (is_file($dir.'/'.$name) && is_writable($dir.'/'.$name))
  42.                 {
  43.                         echo $tab.$name."<br>";
  44.                 }
  45.                 else echo $tab.$name. "-- is unknown hren' <br> ";
  46.         }
  47. }
  48.  
  49. $dir = '/tmp';
  50. $tab = '';
  51. printdir_2($dir, $tab);
  52.  
  53. ?>

Еще вариант нагуглила http://phpforum[dot]ru/index.php?showtopic=54374
 
 Top
megavolt
Отправлено: 05 Октября, 2014 - 00:04:19
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Delovoy пишет:
Подскажите, есть ли ответы на урок №8 ?




CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.  
  4. function scan_dir($cur_dir,$count)
  5. {
  6. echo $cur_dir.' <br>';
  7. $dir_hndl = opendir($cur_dir);
  8. while (false !== ($name = readdir($dir_hndl)))    // зачем тут false !== ?
  9.    {
  10.       if ( $name == '..'||$name == '.' ) continue;
  11.       echo $count;
  12.       if ( is_dir($cur_dir.$name) )
  13.        {
  14.          $cur_next=$cur_dir.$name.'\\';
  15.          echo $name.' <-<br>';
  16.          scan_dir($cur_next, $count.='-');
  17.        }
  18.        elseif ( is_file($cur_dir.$name)&& is_writable($cur_dir.$name) ) echo $name.'<br>';
  19.    }
  20. closedir($dir_hndl);
  21. }
  22.  
  23. $cur_dir = 'D:\\';
  24.  
  25. scan_dir($cur_dir,"");
  26.  
  27. ?>
  28.  


И всё равно и мой вариант и вариант Lana выдаёт ошибку на системных папках винды:

--D:/System Volume Information/

Warning: opendir(D:/System Volume Information) [function.opendir]: failed to open dir: No error in Z:\home\learn\www\hello.php on line 12

Warning: readdir(): supplied argument is not a valid Directory resource in Z:\home\learn\www\hello.php on line 13

Warning: closedir(): supplied argument is not a valid Directory resource in Z:\home\learn\www\hello.php on line 25

(Отредактировано автором: 05 Октября, 2014 - 00:12:01)

 
 Top
bigkrp
Отправлено: 16 Октября, 2014 - 11:45:04
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Урок №1, 9й пункт с оператором ^ я разобрался, но предложенный метод не универсален. У меня он работает, когда длина строк $a и $b одинаковая, иначе урезает выводимые строки до меньшей из двух длин(если в $a 5 символов, а в $b 8, в конце операций обе строки будут длиной 5).

Возможно я чего-то не понял или не так сделал.
 
 Top
bigkrp
Отправлено: 28 Октября, 2014 - 10:41:31
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




В решении задачи(пункт 4) использовал такой же вариант как у тебя 2-й. Но я не прописал строку
PHP:
скопировать код в буфер обмена
  1. if ( $name == "." or $name== ".." ) continue;

без нее выдавало громадный список, с ней все работает.
Вопрос откуда берется название папок ".." или "."?

Lana пишет:

4. Напишите скрипт, выводящий на экран дерево каталога /usr и пропускающий файлы, в которые запрещена запись. Подсказка: Для этого вспомните рекурсию.
Дерево должно иметь вид, например, такой:
/usr/
--local/
----etc/
----bin/
--home/
----myfolder/
--------my_file
PHP:
скопировать код в буфер обмена
  1.  <?PHP
  2.  
  3.  function printdir_1($dir, $tab)
  4. {
  5.         echo $tab.$dir."/<br>";
  6.         $tab .= '--';
  7.         $handle = opendir($dir);
  8.         while (false !== ($name = readdir($handle))) {
  9.                 if ( $name == "." or $name == ".." ) continue;
  10.                 if (is_dir($dir.'/'.$name)) {
  11.                         $newdir = $dir.'/'.$name;
  12.                         printdir_1($newdir, $tab);
  13.                 }
  14.                 elseif ( is_file($dir.'/'.$name) && is_writable($dir.'/'.$name))
  15.                 {
  16.                         echo $tab.$name."<br>";
  17.                 }              
  18.         else    echo $tab.$name. "-- is unknown hren' <br> ";          
  19.     }
  20. closedir($handle);
  21. }
  22.  
  23. $dir = '/usr';
  24. $tab = '';
  25. printdir_1($dir, $tab);
  26.  
  27. /*      VARIANT #2      */
  28. function printdir_2($dir, $tab)
  29. {
  30.         echo $tab.$dir."<br>";
  31.         $tab .= '--';
  32.         $arDir = scandir($dir);
  33.         foreach ($arDir as $key => $name)
  34.         {
  35.                 if ( $name == "." or $name == ".." ) continue;
  36.                 if (is_dir($dir . '/' . $name))
  37.                 {
  38.                         $newdir = $dir . '/' . $name;
  39.                         printdir_2($newdir, $tab);
  40.                 }
  41.                 elseif (is_file($dir.'/'.$name) && is_writable($dir.'/'.$name))
  42.                 {
  43.                         echo $tab.$name."<br>";
  44.                 }
  45.                 else echo $tab.$name. "-- is unknown hren' <br> ";
  46.         }
  47. }
  48.  
  49. $dir = '/tmp';
  50. $tab = '';
  51. printdir_2($dir, $tab);
  52.  
  53. ?>

Еще вариант нагуглила http://phpforum[dot]ru/index.php?showtopic=54374

(Отредактировано автором: 28 Октября, 2014 - 10:43:43)

 
 Top
Lana
Отправлено: 12 Ноября, 2014 - 16:47:55
Post Id



Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




bigkrp пишет:
Вопрос откуда берется название папок ".." или "."?


Кроме файлов и папок в каталогах находятся также элементы "." и "..". Первый элемент указывает на текущий каталог, а второй - на родительский.
 
 Top
bigkrp
Отправлено: 13 Ноября, 2014 - 11:14:59
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Окт. 2014  


Помог: 0 раз(а)




Спасибо.
И раз мне тут отвечают, то задам вопрос по уроку №8

в php.ini я раскомментировал строку "extension=php_pgsql.dll"(т.е. убрал знак ';' перед ней)

файл "php_pgsql.dll" в папке "ext" тоже имеется но всеравно мне выдает ошибку

Fatal error: Call to undefined function pg_connect() in D:\myproject\apache\htdocs\folder1\info.php on line 7

Сам код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $user="postgres";
  4. $pass="admin";
  5. $connection = pg_connect ("host=127.0.0.1 port=5432 dbname=ourdatabase user=$user password=$pass");
  6. ?>
  7.  


апач я тоже перезагружал. Возможно кто-то сталкивался? в чем в теории может быть проблема?
 
 Top
Operator
Отправлено: 23 Марта, 2015 - 22:05:57
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Март 2015  


Помог: 0 раз(а)




Задание Урока №8 - Работа с файлами:
Lana пишет:
3. Напишите скрипт, считывающий из файла f1.bmp строки, сортирующий их и отсортированный результат запишите в файл f1.mp3.
PHP:
скопировать код в буфер обмена
<?PHP
 
$aF1 = file('f1.bmp');
$F1_mp3 = fopen('f1.mp3', 'w');
sort($aF1);
foreach ($aF1 as $num => $f1) {
        fwrite($F1_mp3, $f1);  
}
fclose($F1_mp3);
 
?>


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

Август
Апрель
ДекабрьИюль
Июнь
Май
Март
Ноябрь
Октябрь
Сентябрь
Февраль
Январь

Если изначально в исходном файле f1.bmp месяца раскидать в случайном порядке, то отсортирует нормально...

(Отредактировано автором: 23 Марта, 2015 - 22:07:34)

 
 Top
SanyaG
Отправлено: 03 Июня, 2015 - 12:14:33
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Ответы на вопросы по теме "Регулярные выражения"

Представляю Вам свой вариант решения задач по выше указанной теме.

1. У вас есть php-код. Строковые индексы массивов в нем не заключены в кавычки. Вам надо заключить их в кавычки. Но учтите, что индексами массивов в коде могут быть и переменные, и функции - они не должны оказаться в кавычках. Объявленные константы в расчет не берем.

ответ

CODE (htmlphp):
скопировать код в буфер обмена
  1. $a = 1;
  2. function fct(){
  3.     return 2;
  4. }
  5.  
  6. $arr = array(
  7.     a => 'алекс',
  8.     ba => 'баранов',
  9.     $a => 'переменная',
  10.     с => 'саша',
  11.     fct() => 'функция'
  12. );
  13.  
  14. $pattern = '/(?<!\${1})[\d|\w]+\s=>/';
  15. $replace = '\'\1\'';
  16.  
  17. preg_replace($pattern, $replace, $arr);
  18. echo var_dump($arr);


2. Дана строка. Проверьте, все ли символы в ней уникальны.

ответ

CODE (htmlphp):
скопировать код в буфер обмена
  1. $str = 'sd34gd32';
  2.  
  3. $char = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
  4. $match = array();
  5.  
  6. foreach($char as $item):
  7.     if(in_array($item, $match)) {
  8.         echo "This char is not unique => $item <br>";
  9.     } else {
  10.         $match[] = $item;
  11.     }
  12. endforeach;


3. Проверьте синтаксическую правильность строки, содержащей e-mail

ответ

^[a-zA-Z0-9-\.]+@[a-zA-Z0-9-]+\.[a-z]{2,3}$

4. Проверьте синтаксическую правильность даты. Формат даты 'dd-mm-yyyy'. День и месяц, меньший 10 может быть записан одной цифрой. Неплохо было бы проверить так же на то сколько в месяце дней. Високосность года учитывать не надо.

ответ

CODE (htmlphp):
скопировать код в буфер обмена
  1. date_default_timezone_set('UTC');
  2.  
  3. $filed_date = '01-010-2015';
  4. $count_date = date('t');
  5. $matches = array();
  6.  
  7. if(preg_match('/^([0-9]{1,2})-([0-9]{1,2})-[0-9]{4}$/', $filed_date , $matches) && $matches[1] <= $count_date && $matches[2] <= 12){
  8.    echo 'Date\'s format is valid';
  9. } else{
  10.     echo 'Date\'s format is not valid';
  11. }


5. Найдите все ссылки на странице.

ответ

CODE (htmlphp):
скопировать код в буфер обмена
  1. $html = "Текст <a href='page1.html'>ссылка</a> и снова <a hREF \n =\"page2.html\" title=''>ссылка</a> конец";
  2.  
  3. $href = array();
  4. preg_match_all("/[Aa]\s{1}[Hh][Rr][Ee][Ff][^=]*=['\"\s]*([^\"'>\s#]+)[^>]*>/", $html, $href);
  5.  
  6. echo var_dump($href);



По последнему заданию - пример нашел в нете, так что это не совсем
мое авторство.

Пишите коменты, указывайте на ошибки - буду рад их анализировать ;))
 
 Top
stolmachev
Отправлено: 07 Июля, 2015 - 02:16:15
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




[quote=EuGen]Урок № 5. Математические функции

Евгений, Вы - гений.. но вариант решения, предложенный Вами, очевидно не проверен. Я за невероятные несколько дней ПОПЫТОК (безуспешных) понять Ваш алго-ритм "случайно" нашёл, как исправить процедуру: мне "кажется", я в ней (в классе Конвертера) нашёл пару ошибок (см. комменты справа в тех местах):

1.
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class Converter
  4. ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...  
  5.  
  6.                 while ($buf>0); // --- [b]здесь неверная переменная $buf[/b]
  7. ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...  
  8.  
  9.                 for ($currentPos=0; $currentPos<$totalCiphers; $currentPos++)
  10.  
  11. ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...  
  12. // [b]где-то здесь надо бы ОБНУЛИТЬ переменную $this->iErrorCode, иначе после ошибки за всеми командами тянется её "наследство"[/b]
  13.                 {
  14.                         $currentCipher=$num[$currentPos];
  15.                         $cipherSign=substr_count($this->inputSet, $currentCipher);
  16.                         if($cipherSign==0)
  17.                         {
  18.                                 $this->iErrorCode=255;
  19.                                 $this->sErrorMessage="Cipher '".$currentCipher."' was not found in cipher set: ".$this->inputSet;
  20.                                 return null;
  21.                         }
  22.                         elseif...
  23. ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...   ...  
  24. ?>
  25.  

_________
Прошу прощения за наглость, но осмелюсь предложить исправленный вариант класса вместе с примерами его использования. Я, как новичок, потерял несколько дней, прежде чем сообразил, что со всем этим можно делать Не понял

(Отредактировано автором: 07 Июля, 2015 - 08:47:39)

 
 Top
stolmachev
Отправлено: 07 Июля, 2015 - 08:52:28
Post Id


Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




[quote=stolmachev][quote=EuGen]Урок № 5. Математические функции
обещанный вариант Конвертера систем счисления (к уроку №5):

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. class Converter
  4. {       protected $cipherSet, $rgCiphers, $inputSet, $outputSet, $fromBase, $toBase, $iErrorCode, $sErrorMessage;
  5.  
  6.         function __construct($strSet)                           // Submit only full cipher set.
  7.         {       $this->cipherSet=$strSet;                               // Note: default initialization proc [constructor?]
  8.                 $this->iErrorCode=0;                                    // may be such: Init(), Converter() and __construct() !
  9.                 $this->sErrorMessage="";
  10.                 echo "<br> __construct( \"$strSet\" )";
  11.         }
  12.  
  13.         protected function baseArithmeticMult($fromBase)        //multiplication with non-decimal base
  14.         {       $currentResultLen=count($this->rgCiphers);
  15.                 if ($currentResultLen==0) {return;}
  16.                 $rgMods=array();
  17.                 $currentPos=0;
  18.                 $div=0;
  19.                 do  {$divided=0;
  20.                         if ($currentResultLen>$currentPos) {$divided=$this->rgCiphers[$currentPos]*$fromBase;}
  21.                         $divided+=$div;
  22.                         $rgMods[$currentPos]=$divided%$this->toBase;
  23.                         $div=(int)($divided/$this->toBase);
  24.                         $currentPos++;
  25.                         }
  26.                 while($currentResultLen>$currentPos||$div!=0);
  27.                 $this->rgCiphers=$rgMods;
  28.         }
  29.  
  30.         protected function baseArithmeticPlus($num)     //addition with non-decimal base
  31.         {       $currentPos=0;
  32.                 $divided=$num;
  33.                 do  {   $divided+=(int)($this->rgCiphers[$currentPos]);
  34.                                 $this->rgCiphers[$currentPos]=$divided%$this->toBase;
  35.                                 $divided=(int)($divided/$this->toBase);
  36.                                 $currentPos++;
  37.                         }
  38.                 while ($divided>0);                                             //??? it was erroneous while ($buf>0); +++++
  39.         }
  40.  
  41.         public function getErrorCode()                          //error's getters
  42.         {return $this->iErrorCode;}
  43.         public function getErrorMessage()
  44.         {return $this->sErrorMessage;}
  45.  
  46.         public function baseConvert($num, $fromBase=0, $toBase=0)       //main function
  47.         {       $num=(string)($num);
  48.                 $totalCiphers=strlen($num);                                                             // total Ciphers in $num
  49.                 $this->inputSet=substr($this->cipherSet, 0, $fromBase); // input Set - набор всех возм.цифр для вх.с.с.
  50.                 $this->outputSet=substr($this->cipherSet, 0, $toBase);  //output Set - набор всех цифр для вых.с.с.
  51.                 $this->toBase=$toBase;
  52.                 $this->rgCiphers=array();
  53.                 $this->iErrorCode=0;                                            // init was absent, need reset for next use of function +++++
  54.                 for ($currentPos=0; $currentPos<$totalCiphers; $currentPos++)   // цикл по всем цифрам конвертируемого числа
  55.                 {       $currentCipher=$num[$currentPos];               // current Cipher from current Pos of converting num
  56.                         $cipherSign=substr_count($this->inputSet, $currentCipher);  //cipher Sign - счётчик вхождений
  57.                                                                                                                                                 // подстроки(цифры) в строку исходной с.с.
  58.                         if($cipherSign==0)                                              // нет вхождений - нет такой цифры в исходном наборе с.с.
  59.                         {       $this->iErrorCode=254;
  60.                                 $this->sErrorMessage="Cipher '".$currentCipher."' not found in cipher set: ".$this->inputSet. " (iErrorCode=$this->iErrorCode)";
  61.                                 return null;
  62.                         }
  63.                         elseif($cipherSign>1)                                   // если входит больше 1 раза - исходный набор с.с. неверен
  64.                         {       $this->iErrorCode=255;
  65.                                 $this->sErrorMessage="Cipher '".$currentCipher."' found more than once in cipher set: ".$this->inputSet. " (iErrorCode=$this->iErrorCode)";
  66.                                 return null;
  67.                         }
  68.                         if ($currentPos>0)                                              // if ($currentPos!=0)
  69.                         {   $this->baseArithmeticMult($fromBase);
  70.                         }
  71.                         $this->baseArithmeticPlus(strpos($this->inputSet, $currentCipher));     //<-(позиция цифры во вход.наборе)
  72.                 }
  73.                 $convertedNum=''; $totalCiphers=count($this->rgCiphers);
  74.                 for ($currentPos=0; $currentPos<$totalCiphers; $currentPos++)
  75.                 {       $convertedNum=$this->outputSet[$this->rgCiphers[$currentPos]].$convertedNum;    // converted Num
  76.                 }
  77.                 return $convertedNum;
  78.         }
  79. }
  80.  
  81. function pres($n,$fb=10,$tb=2)                  // print results
  82. {       global $bc,$Npp;
  83.         $Npp++;                         // no serial must be external
  84.         echo "<br> $Npp) " ;
  85.         $res = $bc->baseConvert($n,$fb,$tb);
  86.         echo " baseConvert($n,$fb,$tb)= ", $res;
  87.         if ($bc->getErrorCode()<>0) echo " ",$bc->getErrorMessage();
  88. }
  89. $charset="UTF-8";                       //"Windows-1251";
  90. echo "  <html>
  91.                 <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=$charset\" />
  92.                 <title>My page in $charset</title>
  93.                 <link rel=\"stylesheet\" type=\"text/css\" href=\"wt.css\" />
  94.                 </head> <body>  ";             
  95. echo "<h3> Тест BaseConv: </h3> ";
  96. echo "<font color= blue face=Arial size=2> ";
  97.  
  98. $bc = new Converter("1223333444455555666666777777788888888999999999aaaaaaaaabcdefghi"); // test BAD Set !
  99. // $bc-> __construct();                 // such call is invalid !
  100. $n="1234567890"; $fb=10; $tb=8;// из 10-ричной - в 8-ричную
  101. $Npp=-1;
  102. pres($n,$fb,$tb);
  103. echo "<br>";
  104. $bc = new Converter("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
  105.  
  106. //$Npp=0;                                       // номер по порядку
  107. /*
  108. echo "<br>   ";         //VAR_DUMP("1А3"); echo "<br>   ";
  109. pres("1А3",10,10);                      // "русская А" недопустима
  110. pres("1A3",10,10);                      // "латинская А" допустима, но только в с.с. гораздо выше 10-тиричной
  111. pres("ABCD",16,10);                     // из ошибочно-16-ричной - в 10-ричную
  112. echo "</font> <br> ";
  113. pres("123",10,10);                      // нормальная, хоть и бессмысленная "конверсия" (для проверки)
  114. pres("ABCD",60,10);                     // из 60-ричной - в 10-ричную
  115. pres(7911519,10,60);            // из 10-ричной - обратно в 60-ричную
  116. pres(254);                                      // из 10-ричной - в 2-ичную (по умолчанию)
  117. pres(254,10,16);                        // из 10-ричной - в 16-ричную
  118. pres("254",10,17);                      // из 10-ричной - в 17-ричную
  119. pres("254",10,2);                       // из 10-ричной - в 2-ичную
  120. pres("254",8,2);                        // из 8-ричной - в 2-ичную
  121. pres("10111011",2,16);          // из 2-ичной - в 16-ричную
  122. pres("10111011",2,8);           // из 2-ичной - в 8-ричную
  123. pres("273",8,2);                        // из 8-ричной - обратно в 2-ичную
  124. pres("273",8,4);                        // то же из 8-ичной - в 4-ричную
  125. pres("10111011",2,4);           // то же из 2-ичной - в 4-ричную
  126. pres("10111011",2,3);           // то же из 2-ричной - в 3-ичную
  127. pres("abcd",16,10);                     // из 16-ричной - в 10-ричную
  128. pres("123",10,8);                       // из 10-ричной - в 8-ричную
  129. pres("1234567890",10,16);       // из 10-ричной - в 16-ричную
  130. pres("12345.67890",10,16);      // из 10-ричной - в 16-ричную - то же, но с дробью
  131. pres("1234567890",10,8);        // из 10-ричной - в 8-ричную
  132. */
  133. pres(254,10,16);                        // из 10-ричной - в 16-ричную
  134.  
  135. echo "</body> </html> ";
  136. ?>
  137.  

(Добавление)
[quote=stolmachev][quote=stolmachev][quote=EuGen]Урок № 5. Математические функции
Радость Ну, и чтобы поставить точку на этом Конвертере, предложу ещё свой вариант, который мне кажется короче и проще, особенно для начинающих:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. // Base_Conv2 =
  4. // расширение стандартного конвертора систем счисления (base_convert) до A-:-Z (до 61-ричной с.с.)
  5. // по умолчанию предполагается преобразование из 10-ной в двоичную с.с.
  6. // преобразует в 2 этапа: 1) из входной в 10-ную: $snum = сумма пар сомножителей (вес цифры * вес её разряда);
  7. // 2) из 10-ной - в выходную с.с.: цифры результата - это остатки от деления полученной суммы на основание
  8. // выходной с.с., взятые в обратном порядке (в цикле каждое следующее делимое - это целая часть частного от
  9. // деления, цикл выполяется до тех пор, пока частное не станет == 0).
  10. // заметка для себя: знак ^ - это НЕ СТЕПЕНЬ, а XOR!!
  11.  
  12. function base_conv2($num=0, $frombase=10, $tobase=2)
  13. {       $bastr="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
  14.         if ($num==null | $frombase==null | $tobase==null) return NULL;
  15.         settype($num,"string");                                         // или $num=(string)($num);
  16.         $num=implode ("", explode(".", $num));          // вычленение "дробных" ТОЧЕК - всё к целому!
  17.         //echo "<br> base_conv2: Конверт. с.с.: число $num: ( $frombase -> $tobase ). <br>";
  18.         $fna = func_num_args();
  19.         $lnum=strlen($num); $nums=0;
  20.         for ($i=--$lnum; $i >= 0; $i--)
  21.         {       $ci=$num[$i];
  22.                 $posi=strpos($bastr, $ci, 0);
  23.                 if ($posi===FALSE)              {echo "Цифра $ci недопустима!<br>"; return "Err!";};
  24.                 if ($posi>=$frombase)   {echo "Цифра $ci вне диапазона $frombase-ичной с.с.!<br>"; return "Err!";};
  25.                 $pow=$lnum-$i; $plus=$posi*pow($frombase,$pow);
  26.                 $nums=$nums + $plus;
  27.         }
  28.         $num=$nums; settype($nums,"string");    // === конец 1-го этапа  === //
  29.  
  30.         if ($tobase==10) return $nums;                  // === 2-й этап. Если вых.с.с.=10-ичная, то результат уже готов === //
  31.         $nums="";
  32.         do      {$ci=$num%$tobase; $num=floor($num/$tobase); $sci=$bastr[$ci]; $nums=$sci.$nums;
  33.                 }
  34.         while ($num>0);
  35.         //
  36.         return $nums;
  37. }; // EOFunction base_conv2 ............................................................
  38.  
  39. echo "<h3> Tест Base_Conv2: </h3> ";    // далее - пару десятков проверок
  40. echo "<font color= blue> ";                             // выделение синим примеров с ошибками в аргументах
  41.  
  42. function pres($n,$fb=10,$tb=2)                  // PRint RESults - проверочная процедура
  43. {       global $bc,$Npp;
  44.         $Npp++;                                                         // номер п.п. д.быть внешней(глобал.)переменной
  45.         echo "<br> $Npp) " ;
  46.         $echores = " my Base_Conv2($n,$fb,$tb)=";
  47.         $res = base_conv2($n,$fb,$tb);
  48.         if (!$fb) $fb=10; if (!$tb) $tb=2;      // for php Base_Convert: 10 -> 2 (if absent)
  49.         $echosres = " * * * * * * * php Base_Convert($n,$fb,$tb)=";
  50.         $sres= base_Convert($n,$fb,$tb);        // а что ответит стандартная функция?
  51.         echo $echores, $res, $echosres, $sres;
  52. }
  53.  
  54. //$Npp=0;                                       // номер теста по порядку. в ПХП можно не "инициализировать" нулём :)
  55.  
  56. pres("1А3",10,10);                      // "русская А" недопустима (но Base_Convert игнорирует нелепые "цифры"!)
  57. pres("1A3",10,10);                      // "латинская А" допустима, но только в с.с. выше 10-ичной
  58. pres("ABCD",16,10);                     // из ошибочно-16- в 10-ичную (НО стандартный конвертер НЕ РАЗЛИЧАЕТ капс!)
  59. pres("123",10,10);                      // нормальная, хоть и бессмысленная "конверсия" (для проверки)
  60. pres("ABCD",60,10);                     // из 60-ричной - в 10-ичную
  61. pres(7911519,10,60);            // из 10-ичной - обратно в 60-ричную
  62. echo "</font> <br> ";
  63. pres(254);                                      // из 10-ичной - в 2-ичную (по умолчанию!)
  64. pres(254,10,16);                        // из 10-ичной - в 16-ричную
  65. pres("254",10,17);                      // из 10-ичной - в 17-ричную
  66. pres("254",10,2);                       // из 10-ичной - в 2-ичную
  67. pres("254",8,2);                        // из 8-ричной - в 2-ичную
  68. pres("10111011",2,16);          // из 2-ичной - в 16-ричную
  69. pres("10111011",2,8);           // из 2-ичной - в 8-ричную
  70. pres("273",8,2);                        // из 8-ричной - обратно в 2-ичную
  71. pres("273",8,4);                        // то же из 8-ичной - в 4-ричную
  72. pres("10111011",2,4);           // то же из 2-ичной - в 4-ричную
  73. pres("10111011",2,3);           // то же из 2-ричной - в 3-ичную
  74. pres("abcd",16,10);                     // из 16-ричной - в 10-ичную
  75. pres("123",10,8);                       // из 10-ичной - в 8-ричную
  76. pres("1234567890",10,16);       // из 10-ичной - в 16-ричную
  77. pres("12345.67890",10,16);      // из 10-ичной - в 16-ричную - то же, но с дробью
  78. pres("1234567890",10,8);        // из 10-ичной - в 8-ричную
  79.  
  80. ?>
  81.  
  82.  
 
 Top
Daniill0401
Отправлено: 16 Апреля, 2016 - 09:48:41
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Апр. 2016  


Помог: 0 раз(а)




Урок номер 8

PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.  
  4. <?PHP
  5.         class recurseDir {
  6.                 function __construct(){
  7.  
  8.                         }
  9.  
  10.                         public $parent_dir = "";
  11.                         public $bool = false;
  12.  
  13.                 function recurse($dir){
  14.  
  15.                                 chdir($dir);
  16.                                 $dir = getcwd();
  17.  
  18.                                 if(!$this->bool){
  19.                                         $dir_next = array();
  20.                                         preg_match_all("/[0-9a-zA-Z-\.+_@()]+/s", $dir, $dir_next);
  21.                                         $this->parent_dir=$dir_next[0][count($dir_next[0])-1];
  22.                                         $this->bool = true;
  23.                                 }
  24.  
  25.  
  26.  
  27.                                                 echo $dir."\n";
  28.                                 $array = array();
  29.                                 foreach(scandir($dir) as $dir_item){
  30.                                         if($dir_item!="." and $dir_item!=".." and is_dir($dir."/".$dir_item) and !is_link($dir."/".$dir_item)){
  31.                                                 array_push($array, $dir_item);
  32.                                         }
  33.                                 }
  34.  
  35.  
  36.                         if(!count($array)){
  37.                                 unset($array);
  38.  
  39.                                 $this->dir_prev($dir);
  40.                                 unset($dir);
  41.                         }
  42.                                 else {
  43.                                                 $this->recurse($dir."/".$array[0]);
  44.  
  45.                                 }
  46.  
  47.  
  48.  
  49.         }
  50.  
  51.         function dir_prev($dr){
  52.  
  53.                                 chdir($dr);
  54.                                 $dr=getcwd();
  55.                                         $dir_next = array();
  56.                                         $dir_in_dir_next = array();
  57.                                         preg_match_all("/[0-9a-zA-Z-\.+_@()]+/s", $dr, $dir_next);
  58.                                         foreach(scandir($dr."/../") as $dir_item){
  59.                                                
  60.                                                 if($dir_item!="." and $dir_item!=".." and is_dir($dr."/../".$dir_item) and !is_link($dr."/../".$dir_item)){
  61.                                                         array_push($dir_in_dir_next, $dir_item);
  62.                                                 }
  63.                                 }
  64.  
  65.                                 $i = array_search($dir_next[0][count($dir_next[0])-1], $dir_in_dir_next);
  66.  
  67.  
  68.                                 if(count($dir_in_dir_next)==1 || count($dir_in_dir_next)-1==$i){
  69.  
  70.                                         $dir_next = array();
  71.                                         preg_match_all("/[0-9a-zA-Z-\.+_@()]+/s", $dr, $dir_next);
  72.                                         if($dir_next[0][count($dir_next[0])-2]==$this->parent_dir){
  73.  
  74.                                                         exit();
  75.                                         }
  76.  
  77.  
  78.                                         unset($dir_next);
  79.                                         unset($dir_in_dir_next);
  80.                                         $this->dir_prev($dr."/../");
  81.                                 }
  82.  
  83.                                 else {
  84.                                         unset($dir_next);
  85.                                         $this->recurse($dr."/../".$dir_in_dir_next[$i+1]);
  86.                                 }
  87.                         }
  88. }
  89.  
  90.                 $instance = new recurseDir;
  91.                 $instance->recurse("/usr/");
  92.  ?>
  93.  
  94.  

(Отредактировано автором: 16 Апреля, 2016 - 09:50:02)

 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Апреля, 2016 - 13:57:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 4526
Дата рег-ции: Февр. 2011  
Откуда: Москва


Помог: 221 раз(а)




Daniill0401
Ошиблись адресом.
Вам сюда: http://govnokod[dot]ru/
 
 Top
Страниц (5): « 1 2 3 [4] 5 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Уроки php »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB