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
Форумы портала PHP.SU :: Версия для печати :: большой php файл не выполняется на сервере
Форумы портала PHP.SU » » Вопросы новичков » большой php файл не выполняется на сервере

Страниц (2): [1] 2 »
 

1. maxy666 - 23 Декабря, 2013 - 02:19:05 - перейти к сообщению
Пробую выполниться файл php, размером чуть больше 30 мб.
Сам файл формируется с помощью парсера товаров, служит для правки цен товаров(если цена например упала или подорожала на сайте поставщика)
Файл успешно загружается на сервер, но отказывается выполняться(появляется просто белое окно в браузере).
Если раскидываю данные с файла по 3 файлам по 10 мб то они успешно выполняются.
Пробовал отредактировать php.ini но там не сильно селен, пожалуйста подскажите что нужно править что бы выполнялись большие php файлы.
2. kotyara1979 - 23 Декабря, 2013 - 02:48:16 - перейти к сообщению
В начале большого скрипта помести строчку

CODE (htmlphp):
скопировать код в буфер обмена
  1. ini_set("max_execution_time", "500");


Цифра - это максимальное время исполнения скриптов в секундах.
3. maxy666 - 23 Декабря, 2013 - 03:05:30 - перейти к сообщению
установил max_execution_time", "500
но все то же, в php.ini, max_execution_time уже правлен поставил 2000
так же:
PHP:
скопировать код в буфер обмена
  1. ini_set("php_value max_input_time", "5000");
  2. ini_set("php_value upload_max_filesize", "50М");
  3. ini_set("php_value post_max_size", "50М");


все равно не работает.
Подскажите пожалуйста другие варианты, или что еще нужно править что бы запустить такой 30 мегабайтные файл
4. kotyara1979 - 23 Декабря, 2013 - 03:14:30 - перейти к сообщению
Вопрос.
корректировка цены для каждого товара выполняется отдельно?
т.е. например.

запрос текущей цены в базе - ровна или нет корректировки - выполнение корректировки.
или же идет например формирование большого пакетного скрипта и его выполнение в конце файла?

Файл вообще не выполняется?
добавь print или консольные метки.

Сколько памяти выделено под php?
5. maxy666 - 23 Декабря, 2013 - 05:33:17 - перейти к сообщению
Прикрепляю пример sql запроса для правки цены одного файла. Таким кодом правиться цена на один товар, то есть отдельно по каждому товару.

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

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

На сам php выделено 256МБ (как говорил не силен в php.ini, там строит memory_limit = 256M, вроди этот параметр отвечает за выделенные ресурсы).



Добавлял print и echo но ничего не выводиться, если файл больше примерно 13-15 мб.
Если 10-12 все запускаеться, и вывод происходит.


Если есть возможно подправить php.ini, что бы файл запускался, посоветуйте пожалуйста как и что.

PHP:
скопировать код в буфер обмена
  1. /////////////Правим цену товара
  2.                                                                 $result_name_id = mysql_query("SELECT * FROM `oc_product_description` WHERE `name` = 'ДЕШЕВЛЕ НЕТ! Стильная женская сумка под заказ'");
  3.                                                                 $row_name_id = mysql_fetch_array ($result_name_id);
  4.                                                                 $row_num =  mysql_num_rows($row_name_id);      
  5.                                                                 if ($row_num  <= 1 )
  6.                                                                         {
  7.                                                                                 do
  8.                                                                                         {                      
  9.                                                                                                 $product_id = $row_name_id['product_id'];
  10.                                                                                         }
  11.                                                                                 while ($row_name_id = mysql_fetch_array ($row_name_id));
  12.                                                                         }
  13.                                                                 else
  14.                                                                         {
  15.                                                                           echo "<font color='red'>Товаров больше чем 1, редактируй сам</font>";
  16.                                                                         }
  17.                                                                 $price_actual_product_grn = round ((34.8 * 8.30 * 1.25), 0);
  18.                                                                 $str_sql_query_price = "UPDATE `oc_product` SET `price` = '' WHERE `product_id` = '$product_id'";
  19.                                                                 $res_price = mysql_query($str_sql_query_price);        
  20.                                                                 echo "<tr><td><a href='/index.php?route=product/product&product_id=$product_id'>ДЕШЕВЛЕ НЕТ! Стильная женская сумка под заказ</a></td>";
  21.                                                                 echo "<td>$product_id</td>";
  22.                                                                 echo "<td>32.7</td>";
  23.                                                                 echo "<td>34.8</td>";
  24.                                                                 echo "<td>$price_actual_product_grn</td>";
  25.                                                                 echo "<td>OK</td></tr>";
  26.                                                                 /////////////Отключаем товар
  27.                                                                 $result_name_id = mysql_query("SELECT * FROM `oc_product_description` WHERE `name` = '--НОВИНКА-- Качественная женская сумка'");
  28.                                                                 $row_name_id = mysql_fetch_array ($result_name_id);
  29.                                                                 $row_num =  mysql_num_rows($result_name_id);   
  30.                                                                 if ($row_num  <= 1 )
  31.                                                                         {
  32.                                                                                 do
  33.                                                                                         {                      
  34.                                                                                                 $product_id = $row_name_id['product_id'];
  35.                                                                                         }
  36.                                                                                 while ($row_name_id = mysql_fetch_array ($result_name_id));
  37.                                                                         }
  38.                                                                 else
  39.                                                                         {
  40.                                                                           echo "<font color='red'>Товаров больше чем 1, редактируй сам</font>";
  41.                                                                         }
  42.                                                                 $str_sql_query_disable = "UPDATE `oc_product` SET `status` = '0' WHERE `product_id` = '$product_id'";
  43.                                                                 $res_price = mysql_query($str_sql_query_disable);
  44.                                                                 echo "<tr><td><a href='/index.php?route=product/product&product_id=$product_id'>--НОВИНКА-- Качественная женская сумка</a></td>";
  45.                                                                 echo "<td>$product_id</td>";
  46.                                                                 echo "<td>26</td>";
  47.                                                                 echo "<td>26</td>";
  48.                                                                 echo "<td>$price_actual_product_grn</td>";
  49.                                                                 echo "<td>Товар недоступен</td></tr>";
6. kotyara1979 - 23 Декабря, 2013 - 06:24:39 - перейти к сообщению
maxy666 пишет:
Добавлял print и echo но ничего не выводиться, если файл больше примерно 13-15 мб.
Если 10-12 все запускаеться, и вывод происходит.


PHP:
скопировать код в буфер обмена
  1. for ($i=1; $i<500; $i++) {
  2. $a = loadmem($i);
  3. echo "You have allocated ". $i . "M (". memory_get_usage() . ")<br />";
  4. unset($a);
  5. }
  6.  
  7. function loadmem($howmuchmeg) {
  8. $a = str_repeat("0", $howmuchmeg * 1024 * 1024);
  9. return $a;
  10. }
  11.  


такое впечатление, что памяти не хватает.
Вверху код. Запихни в файл "чтонибдьб.php" и выполни на сервере. где файл грузишь. покажет сколько у тебя реально есть памяти.

может чушь конечно пишу, но ограничения на размер исполняемого скрипта я не встречал, все директивы по памяти касаются именно выполнения, т.е. сколько он сам займет, скрипта, а не его интерпритации. Может здесь корень проблемы.

а вообще конечно подход странный. Не проще ли было вместо файла-страницы сделать именно файл-хранилище данных (txt, xml) c небольшим интерпретатором для вывода и обработки.
Хотя как я понял, это не твой обработчик.
7. likvidator - 23 Декабря, 2013 - 07:36:02 - перейти к сообщению
kotyara1979 пишет:
а вообще конечно подход

Он вроде как не странный,а вообще.... Я полностью хоть код и не смотрел,но белее чем на 100% уверен,что этот 30м файлик можно постить на http://govnokod[dot]ru/
8. kotyara1979 - 23 Декабря, 2013 - 08:00:13 - перейти к сообщению
likvidator пишет:
kotyara1979 пишет:
а вообще конечно подход

Он вроде как не странный,а вообще.... Я полностью хоть код и не смотрел,но белее чем на 100% уверен,что этот 30м файлик можно постить на http://govnokod[dot]ru/


а собственно по теме есть что сказать?
9. likvidator - 23 Декабря, 2013 - 08:02:24 - перейти к сообщению
kotyara1979 пишет:
а собственно по теме есть что сказать?

По теме: если работает разбитый на 3 файла,то пусть лучше правит другие коды и делает в них разбиение,нежели вот в этом копаться....
10. kotyara1979 - 23 Декабря, 2013 - 08:30:38 - перейти к сообщению
likvidator пишет:
kotyara1979 пишет:
а собственно по теме есть что сказать?

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


Думаю вы правы. Это самый короткий путь к решению вопроса.
11. maxy666 - 23 Декабря, 2013 - 16:30:19 - перейти к сообщению
попробовал выполнить код. В итоге получил вывод от You have allocated 1M (1369448) до You have allocated 255M (267707876). Так же попробовал выставить 512 мегабайт в php.ini, но результат такой же - 30 мб файл не выполняеться.


Да возможно там и гавнокод, и можно было бы сделать как то по другому. Просто когда
цена изменилась к примеру на 80-100 товарах сам файл весит где то 3-4 мб, а когда уже большое количество товаров то файл соответственно весит намного больше.

Очень не хотел бы править код, если б можно было обойтись правками в php.ini. Попробую увеличить еще память под php, может что то получиться. Любим советам буду очень рад.
12. bestbios - 23 Декабря, 2013 - 16:44:18 - перейти к сообщению
Данные нужно в базах хранить а не в php файлах, в крайнем случае в отдельных xml файлах
13. IllusionMH - 23 Декабря, 2013 - 16:47:39 - перейти к сообщению
maxy666, а в чем проблема изменения цен по товарам хранить в .csv или любом другом файле, а скрипт обновления сделать в 30 строк?
14. maxy666 - 23 Декабря, 2013 - 16:58:33 - перейти к сообщению
bestbios пишет:
Данные нужно в базах хранить а не в php файлах, в крайнем случае в отдельных xml файлах

К сожалению скрипт не мой, а переделывать импорт цен в xml у меня самого не получиться, так как навыков особых не имею(

Цитата:
а в чем проблема изменения цен по товарам хранить в .csv или любом другом файле, а скрипт обновления сделать в 30 строк?


да вы правы, но такая затея автора парсера. Сами товары парсяться и сохраняются в csv, потом заносятся в каталог парсера, из которого производиться отслеживание цены/наличия товара. При изменении цены/отсутствия в наличии товаров на сайтах донорах формируеться php файл с sql запросами. Парсер не сильно продвинутый, самописный одного человека покупал за 50$, по этому наверное имею такие проблемы с ним(
15. likvidator - 23 Декабря, 2013 - 20:53:31 - перейти к сообщению
maxy666 пишет:
Парсер не сильно продвинутый

вот честно...это просто говно... вы тратите кучу времени и ресурсов, проще тупо переписать,ну или найти того,кто перепишет... Ибо смотреть 101 миллион строк тут наврятли кто захочет

 

Powered by ExBB FM 1.0 RC1