Проблема передачи строки из PHP в JS

201
12 октября 2018, 02:10

Разработанный сайт исправно работает без ошибок на локальном сервере. Однако на хостинге возникают проблемы. Сам сайт выполняет следующие процедуры: при помощи формы загружается экселевский файл, в котором данные. Эти данные сохраняются и записываются в текстовый файл на сервере. Происходит перенаправление обратно на сайт и происходит чтение того текстового файла с последующим удалением и инжектирование полученных данных в html документ в массив javascript, который в дальнейшем передаёт этот массив в скрипт, который проводит дальнейшие манипуляции с этими данными.

Проблема же в том, что при загрузке относительно больших файлов файлов, порядка 50 КБ (малые порядка 20 КБ) и перенаправлении, в массив записываются данные и в конце концов закрываются все теги и не объявляется оставшийся дивы. Проверяя работу на локальном сервере, там отображается всё при любом раскладе.А самое странное, что это происходит не каждый раз. Т.е. иногда 3 раза подряд я могу использовать функцию, а иногда по 10 раз не работает на больших файлах. С малыми файлами такой проблемы нет.

Во-первых прошу впринципе помочь с данной проблемой.В чём тут могут быть проблемы? Во-вторых есть вопросы, связанные с тем, есть ли ограничения, которые могли бы этому поспособствовать на хостинге.

PHP параметры выставил уже так:

php_value max_execution_time 0

php_value max_input_time 500

php_value upload_max_filesize 30M

php_value post_max_size 30M

php_value default_charset utf-8

Но от этих параметров ничего не изменилось. Возможно камнем преткновения является мой способ передачи массива строк из php в javascript со стороны container.php:

echo "<script> var massive=\"\"; \r\n ";
for($i=0;$i<strlen($res);$i=$step+1) // пробегаю по полученным данным и 
// разбиваю их на строки, т.к. у html видимо есть ограничения по длине, и 
//если слишком длинные строки будут, то их будет не удобно передать в массив 
//javascript.
{
if($i+500<strlen($res))
{
    if (strpos($res,'|',$i+500) !== false) 
    {
        $step=strpos($res,'|',$i+500);
    }
else
    break;
}
else
{
    if (strpos($res,'|',$i) !== false) 
    {
        $step=strpos($res,'|',$i);
    }
}
echo "massive+='".$str."';\r\n";
echo "</script> ";
echo "<script>\r\n ";
echo "var a=0;";
echo "</script> \r\n ";

со стороны javascript на html странице:

<?php include 'container.php'; 
?>
<script src="plot.js" type="text/javascript"> // вызов функции, работающей с 
//массивом
</script>
<div ......> </div>

В итоге в моменты, когда не срабатывает массив передаётся не весь, а plot.js и div не срабатывают совсем. При этом все теги закрываются и ошибок не выдаёт.

Answer 1

Всё, проблему решил. Передача через html код была крайне неудачной. Реализовал всё при помощи get запроса и всё прекрасно работает. Javascript выполняет get запрос на файл php, который в свою очередь читает строку и возвращает её javascript.

READ ALSO
Автоматическая очистка полей

Автоматическая очистка полей

Как убрать автоматическую очистку полей в php? Те когда пользователь заполняет поля, и нажимает на кнопку, то поля очищаются

163
Нужно убрать Jquery из Yii2

Нужно убрать Jquery из Yii2

Убрать Jquery из yii2Дело в том что скрипты самого yii задействуют jquery, и хочется просто вырезать jq из сайта вообще

188
Изменение прав на php

Изменение прав на php

Есть ссылка, "Личный кабинет"При нажатии на неё нас кидает к форме авторизации

207
Передача шага цикла в генератор

Передача шага цикла в генератор

Подскажите пожалуйста, как через send() передать значение шага в цикл, с которым он будет выводить значения

192