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

Форум PHP

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

 

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

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

тема: Исчезающий скрипт
 
 автор: Владимир55   (08.01.2009 в 20:36)   письмо автору
 
 

Скрипт, код которого приведен ниже, производит просмотр содержимого сайта.

На Денвере он работает безупречно, просматривая все фаайлы секунд за пятнадцать. А вот на сервере ведет себя несколько странно.

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

Затем выводится еще несколько порций информации,а потом скрипт словно исчезает: ни сообщения об истечении времени работы, ни сообщения о финише, ни даже дописывания последнего обрванного сообщения - вообще ничего...

Что бы это значило?
    echo "START";

    set_time_limit(3000); 

$root  =  $_SERVER['DOCUMENT_ROOT'];   
function find_new($dir)  
{          

$new_dir = null;       
$dir_files = opendir($dir);      
    while(false !== ($file = readdir($dir_files)))  
    {   

        if($file != '.' && $file != '..')   
        $new_dir[] = $dir."/".$file;  
    }  
          
        if($new_dir)  
        foreach($new_dir as $check )  
        {  
              if(is_file($check))     
              echo $check."<br>";                   
              elseif(is_dir($check))  
              find_new($check);   
        }  
}      
find_new($root);  

    echo "<br> FINIH";

  Ответить  
 
 автор: Trianon   (08.01.2009 в 20:43)   письмо автору
 
   для: Владимир55   (08.01.2009 в 20:36)
 

в исх.тексте HTML тоже обрыв?
Он у Вас , правда, без переносов...

  Ответить  
 
 автор: Владимир55   (08.01.2009 в 20:52)   письмо автору
 
   для: Trianon   (08.01.2009 в 20:43)
 

Сверху
<html>
<head>
  <title></title>
</head>
<body>
<?php
Снизу
?>
</body>
</html>

Нельзя так?

  Ответить  
 
 автор: Николай2357   (08.01.2009 в 20:54)   письмо автору
 
   для: Владимир55   (08.01.2009 в 20:52)
 

Ему банально не хватает 30 сек. Попробуйте вначале скрипта поставить
<?
set_time_limit
(0);

  Ответить  
 
 автор: Владимир55   (08.01.2009 в 20:58)   письмо автору
 
   для: Николай2357   (08.01.2009 в 20:54)
 

Там стоит почти час...

  Ответить  
 
 автор: Николай2357   (08.01.2009 в 21:02)   письмо автору
 
   для: Владимир55   (08.01.2009 в 20:58)
 

Действительно... Просто у меня подобное было из за времени. Может не стоит абсолютный путь ему прописывать, мало ли...

  Ответить  
 
 автор: Владимир55   (08.01.2009 в 21:06)   письмо автору
 
   для: Николай2357   (08.01.2009 в 21:02)
 

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

И с путями нормально - ведь файлы он находит и выводит...

Мне кажется, что это броузер всему причиной - не отдает последнюю порцию информации.

  Ответить  
 
 автор: Николай2357   (08.01.2009 в 21:09)   письмо автору
 
   для: Владимир55   (08.01.2009 в 21:06)
 

Браузер только принимает, он ничего не отдаёт. Ну так попробуйте с другого.

  Ответить  
 
 автор: Николай2357   (08.01.2009 в 21:18)   письмо автору
 
   для: Владимир55   (08.01.2009 в 21:06)
 

А обрывается на одном и том же месте? Может там имя файла хитрое попадается? Попробуйте
<?
echo htmlspecialchars($check)."<br>\r\n";

  Ответить  
 
 автор: xx77   (08.01.2009 в 21:09)   письмо автору
 
   для: Владимир55   (08.01.2009 в 20:58)
 

у меня работает этот скрипт , добавил счётчик колличества файлов, считает правильно
<pre><?
    set_time_limit
(3000);  
echo 
"START\n";
flush();
$i 0;
$root  =  $_SERVER['DOCUMENT_ROOT']; 

function 
find_new($dir)  {           
  global 
$i;
 
$new_dir null;       
 
$dir_files opendir($dir);      
 while(
false !== ($file readdir($dir_files))) {    
        if(
$file != '.' && $file != '..')    
        
$new_dir[] = $dir."/".$file;
 }
 if(
$new_dir)   
 foreach(
$new_dir as $check ) {   
        if(
is_file($check)) {
        echo 
$check."\n";
        
$i++;
        }
        elseif(
is_dir($check))  find_new($check);    
  }
  
flush();  
}

find_new($root);   
echo 
"$i\n FINISH";
?>
попробуйте так , с flush()

и set_time_limit() не всегда может помогать

  Ответить  
 
 автор: Trianon   (08.01.2009 в 21:09)   письмо автору
 
   для: Владимир55   (08.01.2009 в 20:52)
 

в html-тексте а не в php
правая кнопка мыши. исх. код HTML-страницы

  Ответить  
 
 автор: Владимир55   (08.01.2009 в 21:23)   письмо автору
677 байт
 
   для: Trianon   (08.01.2009 в 21:09)
 

Файл в Приложении.

  Ответить  
 
 автор: Владимир55   (08.01.2009 в 21:26)   письмо автору
440 байт
 
   для: Владимир55   (08.01.2009 в 21:23)
 

В архиве

  Ответить  
 
 автор: Николай2357   (08.01.2009 в 21:28)   письмо автору
 
   для: Владимир55   (08.01.2009 в 21:23)
 

Да Вы прям по экрану щёлкните правой кнопкой мышки и найдите что то вроде "исходный код". Там всё на месте или тоже обрезано? Файл то тут причём?

  Ответить  
 
 автор: Владимир55   (08.01.2009 в 22:08)   письмо автору
 
   для: Николай2357   (08.01.2009 в 21:28)
 

Теперь я понял, о чем речь.

А то предположил, что я где-то код изложил не полностью.

Вставил flush(); и исполнение завершилось!!!

Спасибо!

  Ответить  
 
 автор: Trianon   (08.01.2009 в 21:37)   письмо автору
 
   для: Владимир55   (08.01.2009 в 21:23)
 

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

  Ответить  
 
 автор: Владимир55   (11.01.2009 в 20:16)   письмо автору
 
   для: Trianon   (08.01.2009 в 21:37)
 

Рано я обрадовался - flush() вроде бы исправил ситуацию, но не надолго. Хотя состав сайта остался неизменным, скрипт опять стал "исчезать".

При этом в броузере виден только вот этот код:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=windows-1251"></HEAD>
<BODY></BODY></HTML>

  Ответить  
 
 автор: Николай2357   (11.01.2009 в 20:35)   письмо автору
 
   для: Владимир55   (11.01.2009 в 20:16)
 

Попробуйте без echo в функции, вот таким макаром:
<? 
    set_time_limit
(3000);   
echo 
"START\n"
flush(); 
$i 0
$root  =  $_SERVER['DOCUMENT_ROOT'];  
$echo =null;
function 
find_new($dir)  {            
  global 
$i$echo
 
$new_dir null;        
 
$dir_files opendir($dir);       
 while(
false !== ($file readdir($dir_files))) {     
        if(
$file != '.' && $file != '..')     
        
$new_dir[] = $dir."/".$file
 } 
 if(
$new_dir)    
 foreach(
$new_dir as $check ) {    
        if(
is_file($check)) { 
        
$echo .= $check."<br>\r\n"
        
$i++; 
        } 
        elseif(
is_dir($check))  find_new($check);     
  } 
  
flush();   


find_new($root);    
echo 
$i."<br>\r\n".$echo." FINISH"
?>
А вообше я его специально погонял, так как это моя писанина. Спокойно пересчитывает каталог из более 20 000 файлов, ни одного сбоя. Наверное на хостинге у Вас не всё в порядке.

  Ответить  
 
 автор: Владимир55   (14.01.2009 в 11:23)   письмо автору
 
   для: Николай2357   (11.01.2009 в 20:35)
 

У меня 83 тысячи файлов. На Денвере работает безупречно и очень быстро. На сервере иногда все проходит, а иногда не проходит - как-то непредсказуемо...
Даже на том сервере, где всего 3 тысячи файлов!

"Наверное на хостинге у Вас не всё в порядке."
Такое тоже возможно.
У меня ВДС и я давно бы поправил, если бы знал, что именно надо поправлять.

  Ответить  
Rambler's Top100
вверх

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