За последние 24 часа нас посетили 17725 программистов и 1658 роботов. Сейчас ищут 964 программиста ...

file_get_contents и большой файл

Тема в разделе "PHP для новичков", создана пользователем joost, 3 мар 2008.

  1. joost

    joost Guest

    Скрипт использует file_get_contents для получения содержимого файла и дальнейшей роботы с ним .
    При загрузке файла небольшого размера проблем нет.

    При загрузке файла примерно в 3 МБ. Скрипт обрывается имено на выполнении file_get_contents.

    Раньше на простом хостинге таких проблем небыло.
    Вот перешол на VDS - начались.

    Установил -
    памяти 16 мб
    размер загружаемых файлов 5 мб.

    всеравно обрывается.
    что делать?
     
  2. ValaR

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

    С нами с:
    3 май 2007
    Сообщения:
    196
    Симпатии:
    0
    Адрес:
    Челябинск
    Хых, у меня такая же проблема. Только загружаю я html-страницы. Но помоему её, кроме как, увеличив память, решить не получиться. Или можно попробывать загрудать содержимое файла через mysql. Скажем командой LOAD DATA INFILE, или может еще есть какие-нибудь. И потом работать с содержимым файла через mysql.
     
  3. joost

    joost Guest

    забивает память на все 16 мб.
    на обычном хостинге такого небыло. хотя сомневаюсь, что там было установлено более 8 мб., не говорю уже про 16 мб.

    что же делать?
     
  4. ValaR

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

    С нами с:
    3 май 2007
    Сообщения:
    196
    Симпатии:
    0
    Адрес:
    Челябинск
    Это че не помогло?)
     
  5. joost

    joost Guest

    Разве xml можно загрузить через LOAD DATA INFILE?
     
  6. joost

    joost Guest

    если реально - то как это сделать?
     
  7. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    fsockopen + fread, читаем по кусочкам и записываем куда надо.
     
  8. joost

    joost Guest

    надо имено file_get_contents считывать xml


    так что в настройках подправить?
     
  9. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    XML можно через сакс читать.
     
  10. joost

    joost Guest

    что за штука? обясните в двух словах
     
  11. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  12. joost

    joost Guest

    ладно с xml.
    проблема счас в том, что file_get_contents обрывается на большом файле. подробней в топике.

    кто нибуть подскажите как подправить?
     
  13. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Ты же сам говорил, что тебе надо XML обрабатывать. Дак нафига грузить файл целиком, если его можно последовательно обрабатывать?
    Ну дак установи такой лимит памяти, что не обрывалась. Подбери экспериментальным путём.
     
  14. host

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

    С нами с:
    20 июн 2007
    Сообщения:
    733
    Симпатии:
    3
    почему?
     
  15. joost

    joost Guest

    fsockopen + fread?
     
  16. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Хоть fsockopen, хоть fopen. Смотря, что надо...
     
  17. joost

    joost Guest

    А как тогда может этот скрипт работать на виртуальном хостинге с теми же 16 мб., а на VDS обрывается?
     
  18. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Что значит обрывается? Ошибка о том, что не хватает памяти?
     
  19. joost

    joost Guest

    PHP:
    1.  
    2. $str=file_get_contents($url);
    3. $max_i=preg_match_all("/<data>(.*)<\/data>/isU", $str, $data);
    4.  
    $ur - xml файл на другом сайте (сервере)
     
  20. joost

    joost Guest

    да.
     
  21. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    joost
    Если надо просто выводить то просто fopen и кусками его выводить.
    Если надо обрабатывать а он не вмещается в память то только добавление памяти поможет. (можно конечно читать кусками и обрабатывать, но для XML это не всегда подходит)
     
  22. Anonymous

    Anonymous Guest

    Expat для этого и нужен - обрабатывать XML кусками
     
  23. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Да и libxml2 не плохо справляется (в PHP 5 он заменил Expat) :) Тут нужен парсер на основе SAX, коим http://php.net/xml и является.