Вместимость текста в переменную
http://hardbmx.ru/help/TreeViewShow.php?id=36
Вывожу так:
@$result = mssql_query($thisproc);
@$row = mssql_fetch_array($result);
echo "<p class = \"text\">".$row["Answer"]."</p>";
Никто не в курсе как решить проблему?
"У меня в БД хранится большей текст."
Там храниться первое сообщение из этой темы:
http://www.hardbmx.ru/forum/index.php?showtopic=478
Скорее varchar(3000) написать чем smalltext. А text весит много.
Повторюсь. Весь текст ХРАНИТСЯ в БД. Он уже там есть. И запрос выводит полностью текст. А на вывод на PHP идет часть.
Тогда скорее всего бы возращалась ошибка хотя бы в виде нотиса.
Никто не в курсе как решить проблему?
1) Убеждаемся, что в БД есть все 3000 символов. Как я понимаю, это уже выполнено.
2) Убеждаемся, что PHP полностью получил ответ от MySQL:
echo strlen($row["Answer"]);
Если и там все символы, то думаю уже понятно, в чем дело? ;)
[COLOR="Gray"][SIZE="1"]P.S. Если нет, курить в строну буферизации вывода Output Control Functions и директивы output_buffering.[/SIZE][/COLOR]
Нет. Это MySQL нотисы раздаёт. А MSSQL просто отдаёт содержимое. А сам PHP просто в поток пишет то, что понимает до того места, где затык происходит. Это Windows ставит квадратики в непонятных местах.
Большинство функция для работы со строками в PHP 4-5 безопасны для работы с двоичными данными. Спец. символы тут не при чем.
Вернее возможен вариант, что php выводит текст полностью, а вот уже браузер заканчивает вывод строки на нулевом символе. Последняя опера например прекрасно отображает строку с нулевыми символами, но при просмотре HTML-кода страницы, на первом 0-м символе обрывается.
2) Убеждаемся, что PHP полностью получил ответ от MySQL:
echo strlen($row["Answer"]);
Если и там все символы, то думаю уже понятно, в чем дело? ;)
Да действительно возвращает 4 кб
http://hardbmx.ru/help/TreeViewShow.php?id=36
Но в БД есть все 1 897 слов. Проверил только что. Копернул из результата запроса в Word. ВОт что идет после последнего слова "диагностировать," :
"что случилось с вашим бедным суставом. Так что, если вас что-то напрягает, - смело к врачу!<br /> <br /> 3. Переломы<br /> <br /> "
Мне кажется тут нет непечатного символа для затыка PHP.
http://hardbmx.ru/help/TreeViewShow.php?id=36
Но в БД есть все 1 897 слов. Проверил только что. Копернул из результата запроса в Word.
Зачем? Я же привел в п.2, что нужно дописать в твой код. Если echo strlen($row["Answer"]) вернет тоже количество символов (не слов!), что и в БД, то как я уже сказал, дело в буферизации вывода в PHP. Ты P.S. в посте прочел ;) ?
2) Убеждаемся, что PHP полностью получил ответ от MySQL:
echo strlen($row["Answer"]);
Если и там все символы, то думаю уже понятно, в чем дело? ;)
[COLOR="Gray"][SIZE="1"]P.S. Если нет, курить в строну буферизации вывода Output Control Functions и директивы output_buffering.[/SIZE][/COLOR]
Да я прочел. Просто я в 2007 Офиссе не мог найти сколько символов.
2. Более 12 000 символов запрос выдает.
Но я не понял в чем проблема вывода этих символов.
О, Господи...
2. Более 12 000 символов запрос выдает.
Но я не понял в чем проблема вывода этих символов.
Офис то тут каким боком? Если echo strlen($row["Answer"]) вернуло такое же количество символов, что и в БД, то причину я тебе уже указал. Впрочем как и возможное решение.
Как это решать?
Конкретно с данной ситуацией я не сталкивался. Но по косвенным признакам можно сделать предположение, что проблема в буферах. В нормально настроеной системе такого возникнуть не должно было, буфер должен заполняться данными, отправляться на клиент, очищаться и буферизовать новую порцию данных. Поэтому какую конкретно опцию нужно изменить в твоем случае ни кто не знает. Я тебе очертил круг настроект в которых нужно порыться. Ищи.
Дело не в буфере. Это настройки php.ini
Но у меня что-то не получается. Мне сказали, что это можно подправить из PHP файла при выполнении скрипта.
Я пытался что-то сделать, но не работает.
Много где смотрел, в частности здесь:
http://ru2.php.net/manual/ru/ref.mssql.php
http://www.nova-star.ru/articles/ma...e-portable.html
Там есть такие слова:
Which you can run with the following PHP (best run just after you make a connection).
mssql_query("SET TEXTSIZE 2147483647");
A better way to work around the issue is to change the "textlimit" and "textsize" settings within php.ini, like so:
mssql.textlimit = 2147483647;
mssql.textsize = 2147483647;
Подключение к БД идет в отдельном файле, я сразу после инклуда этого файла пишу mssql_query("SET TEXTSIZE 2147483647");
Но не помогло.
Вот только я не могу понять, что тут вставлять под $conexion
ini_set( 'mssql.textlimit' , '65536' );
ini_set( 'mssql.textsize' , '65536' );
А просот ini_set без mssql_query, ничего не меняет.
Может кто поможет разобраться?!
Вот только я не могу понять, что тут вставлять под $conexion
http://ru2.php.net/manual/ru/function.mssql-query.php
Это не обязательный параметр. Указание на то соединение, к которому это нужно применить.
Is the length of varchar(max), nvarchar(max), varbinary(max), text, ntext, or image data, in bytes. number is an integer and the maximum setting for SET TEXTSIZE is 2 gigabytes (GB), specified in bytes. A setting of 0 resets the size to the default (4 KB).
Значит, ты не туда пишешь php.ini директивы и они у тебя не срабатывают. Деталей работы MS SQL я не знаю, но сдается мне, что использование запроса SET TEXTSIZE свыше 4кб может быть запрещено на самом сервере.
И это все равно проблемы с буферами. 2ГБ твоих должны где-то храниться до отдачи на клиент. СУБД их отдавать само не будет.
Дело в том, что в php.ini стоит настройка, что максимум выводить 4096 символов. Ну точнее это по умолчанию стоит. И можно её менять на время сеанса. Но похоже реально не там стоит этот файл. Пойду опять с сапортом болтать.