За последние 24 часа нас посетили 51385 программистов и 1758 роботов. Сейчас ищут 688 программистов ...

Нужна помощь!

Тема в разделе "Прочие вопросы по PHP", создана пользователем fessnecro, 11 мар 2012.

  1. fessnecro

    fessnecro Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    36
    Симпатии:
    0
    Ребят! Помогите! Проблема в том что скрипт ооочень медленно выполняется. Суть скрипта очень проста - проверяет наличие файлов на уделенном хосте и заносит информацию в базу
    Из-за вот этого куска " $size=getimagesize($file_path);" все и начинает тормозится! Пробовал и другими способами проверять наличие файлов (заголовки, fopen), тоже самое очень тормозит.

    for ($i=1;$i<=10;$i++)
    {
    $file_path="http://isua.ru/acropol/reklama/1/photo/".$id."_".$i.".jpg";
    $size=getimagesize($file_path);
    if ($size)
    $foto=$foto+1;
    }
     
  2. Denis.Y

    Denis.Y Активный пользователь

    С нами с:
    8 авг 2011
    Сообщения:
    145
    Симпатии:
    0
    Адрес:
    Россия, Самарская область
  3. fessnecro

    fessnecro Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    36
    Симпатии:
    0
    $file_path="http://isua.ru/acropol/reklama/1/photo/".$id."_".$i.".jpg";
    $headers = get_headers($file_path);
    if ($headers['Content-Length']>2124)
    $foto=$foto+1;
    }
    Тоже самое... Очень долго скрипт работает, в чем может быть причина?? =((
     
  4. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    а чему у вас $id равно?

    var_dump($file_path); пожалуйста
     
  5. fessnecro

    fessnecro Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    36
    Симпатии:
    0
    id=номер строки из csv файла, тоесть это получается цикл внутри цикла...
    вардамп: string(48) "http://isua.ru/acropol/reklama/1/photo/395_1.jpg"
     
  6. Denis.Y

    Denis.Y Активный пользователь

    С нами с:
    8 авг 2011
    Сообщения:
    145
    Симпатии:
    0
    Адрес:
    Россия, Самарская область
    вероятно в том, что это изображения. чтобы определить его размер, нужно получить миме заголовок, хотя бы, этого изображения.
    даже если на доступ к файлу требуются милисекунды (а тут ещё скорость работы сервера, с которого считывается) и собственно ширина канала связи..
    то при обработке 100 файлов к примеру, скорость всё равно не будет блестать.
     
  7. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Попробуйте, в дополнение к тому, что советовал Денис, поставить следующий код в начало скрипта
    Код (PHP):
    1.     array(
    2.         'http' => array(
    3.             'method' => 'HEAD'
    4.         )
    5.     )
    6. ); 
     
  8. fessnecro

    fessnecro Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    36
    Симпатии:
    0
    мне не нужно проверять его размер, мне просто нужно проверить существует ли файл или нет! Но фишка в том что апач настроен так что если картинки нет, он возвращает пустой файл, поэтому я именно размер и проверяю, по миме типу тоже пробовал - скорость работы такая же( пробовал на разных хостингах

    Добавлено спустя 4 минуты 45 секунд:
    после этого скрипт вообще перестал работать
     
  9. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    у меня работает. С одинаковой скоростью. При плохом соединении метод HEAD будет работать заметно лучше. Но у вас, видимо самое медленное место, это скорость отдачи контента сервером, с которой, я так понимаю, вы уже ничего сделать не можете.


    ps: у меня скрипт выполняется в среднем за 5-8 секунд
     
  10. fessnecro

    fessnecro Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    36
    Симпатии:
    0
    У меня сейчас в базе 380 записей, у каждой может быть 10 фото, тоесть это 3800 проверок. Пинг с сервером 3мс, должно выполнятся меньше минуты!

    Добавлено спустя 44 секунды:
    Время выполнение скрипта: 783.8842010498
    вот сколько у меня ушло
     
  11. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    вы время обработки сервером вашего запроса учитываете? у меня выходит что на обработку одного запроса уходит в среднем пол секунды.
     
  12. fessnecro

    fessnecro Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    36
    Симпатии:
    0
    время выполнение одного запроса 0.2123990059
     
  13. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    3800 / 800 = 5 проверок в секунду
    1 / 0.21 = 5 проверок в секунду
    всё сходится
     
  14. fessnecro

    fessnecro Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    36
    Симпатии:
    0
    то-есть от меня тут уже ничего не зависит??
     
  15. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Помести на удалённом сервере PHP-скрипт, который получает полный список файлов, которые нужно проверить и проверяет, после чего возвращает ответ. А на своём сервере делай запрос к этому скрипту и передавай ему список файлов. Таким образом для проверки всех файлов будет нужен всего один запрос.

    Это, конечно, если есть доступ к тому серверу, на котором проверяется наличие файлов.
     
  16. fessnecro

    fessnecro Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    36
    Симпатии:
    0
    спасибо так и хочу сделать.. если разрешат)
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    cron+bd обновлять раз в сутки...
     
  18. fessnecro

    fessnecro Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    36
    Симпатии:
    0
    Раз в сутки для меня это мало, мне нужно каждые 3 часа(
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    если тебе так тесно надо с ними сотрудничать, то надо как-то с ними договориться и получать актуальные данные одним запросом.

    Добавлено спустя 7 минут 29 секунд:
    надо параллелить проверки просто. запускать по три штуки в секунду. тогда актуальность будет в районе 20 минут.
     
  20. fessnecro

    fessnecro Активный пользователь

    С нами с:
    11 мар 2012
    Сообщения:
    36
    Симпатии:
    0
    Спасибо, договорился с обратной стороной. Тему можно закрывать