Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как убрать справедливое, но нежелательное диагностическое сообщение?
 
 автор: Владимир55   (09.07.2007 в 15:51)   письмо автору
 
 

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

// ПЕРЕБИРАЕМ ВСЕ СТРАНИЦЫ СООБЩЕНИЙ
// $nom_str  Номер страницы
for ($nom_str = 1; $nom_str <=10000; $nom_str++)
{
$adr_str = "htm/" . $nom_str . ".htm" ;  // Адрес страницы
$buff_text = file_get_contents($adr_str); // Открываем страницу 
if (!$buff_text) break;
}


Перебор идет до тех пор, пока не сформируется адрес несуществующей страницы, которую невозможно открыть. Вцелом код выполняет возложенную на него задачу, но при завершении дает сообщение "Warning: file_get_contents(htm/101.htm): failed to open stream: No such file or directory in w:\home\news-rss\www\899.php on line 66", которое для пользователя совершенно неуместно!

Можно ли как-то убрать это сообщение?

Или решить эту же задачу более корректно, без умышленного создания ошибки?

   
 
 автор: parczynski   (09.07.2007 в 15:57)   письмо автору
 
   для: Владимир55   (09.07.2007 в 15:51)
 

Вообще вывод любых сообзщений такого рода нежелателен. Чтобы это предотвратить можно просто воспользоваться функцией error_reporting(0).

   
 
 автор: Владимир55   (09.07.2007 в 16:12)   письмо автору
 
   для: parczynski   (09.07.2007 в 15:57)
 

Отличная мысль - взял в свою копилку хороший решений. Спасибо!

   
 
 автор: Poison   (09.07.2007 в 15:59)   письмо автору
 
   для: Владимир55   (09.07.2007 в 15:51)
 

А папка на вашем хосте?


....
$buff_text = @ file_get_contents($adr_str); // Открываем страницу  
....

   
 
 автор: Владимир55   (09.07.2007 в 16:12)   письмо автору
 
   для: Poison   (09.07.2007 в 15:59)
 

Да, папка у меня!

Так классно получилось - спасибочки!

   
 
 автор: Poison   (09.07.2007 в 16:18)   письмо автору
 
   для: Владимир55   (09.07.2007 в 16:12)
 

Если папка у вас=)


<?

$dir 
'htm/'
if ( $handle opendir($dir) ) {
    while ( (
$file readdir($handle)) !== false ) { 
        if ( 
$file != "." && $file != ".." ) {
            if ( 
is_file($dir $file) ) {
                
$buff_text file_get_contents($dir $file); // Открываем страницу  
                
if ( !$buff_text ) { break; }
            }
        }
    }
    
closedir($handle);
}
    
?>

   
 
 автор: Владимир55   (09.07.2007 в 20:26)   письмо автору
 
   для: Poison   (09.07.2007 в 16:18)
 

Красиво...

Чувствуется рука профессионала!
Читая такие коды, я ощущаю себя просто кустарем...

   
 
 автор: Unkind   (11.07.2007 в 10:36)   письмо автору
 
   для: Владимир55   (09.07.2007 в 20:26)
 

/* Мысли вслух */
Хм...А совет по поводу того, что нельзя использовать file_get_contents() для таких случаев, нафиг удалили?

   
 
 автор: Trianon   (10.07.2007 в 02:08)   письмо автору
 
   для: Владимир55   (09.07.2007 в 15:51)
 

Я всё же отвечу на вопрос в теме.
Справедливое, но локально нежелательное диагностическое сообщение, без уменьшения чувствительности к промахам программиста, можно убить единственным способом. Символом @ поставленным перед вычислением выражения, в котором ожидается диагностируемая ситуация.

   
 
 автор: CrazyAngel   (10.07.2007 в 05:08)   письмо автору
 
   для: Владимир55   (09.07.2007 в 15:51)
 

хм... если в этой папке только страницы, то можно поступить так

<?php
$dir 
opendir (".");
while ( 
$file readdir ($dir)){
     if (( 
$file != ".") && ($file != "..")){
      echo 
"$file<br>";
    }
}
closedir ($dir);
?>

P.S. код взят с учебника
яб написал так :)

<?php
$dir 
opendir (".");
readdir ($dir);
readdir ($dir);
while ( 
$file readdir ($dir)){
    echo 
"$file<br>";
}
closedir ($dir);
?>

   
 
 автор: Владимир55   (10.07.2007 в 11:18)   письмо автору
 
   для: CrazyAngel   (10.07.2007 в 05:08)
 

Супер!

А почему оператор

readdir ($dir);

указан дважды?

   
 
 автор: Владимир55   (10.07.2007 в 11:30)   письмо автору
 
   для: Владимир55   (10.07.2007 в 11:18)
 

Понял - повтором снимаются ".."

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования