Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вместимость текста в переменную

9.5K
15 марта 2008 года
snubr
70 / / 30.10.2006
У меня в БД хранится большей текст. Примерно 4000 символов. При выводе его в PHP он выводит только часть его.
http://hardbmx.ru/help/TreeViewShow.php?id=36
Вывожу так:
 
Код:
@$thisproc = "SELECT  Answer, FROM *** WHERE id = {$id}";
@$result = mssql_query($thisproc);
@$row = mssql_fetch_array($result);
echo "<p class = \"text\">".$row["Answer"]."</p>";

Никто не в курсе как решить проблему?
15
15 марта 2008 года
shaelf
2.7K / / 04.05.2005
Тип поля в таблицы с varchar на smalltext или text поменяй
9.5K
15 марта 2008 года
snubr
70 / / 30.10.2006
Не на столько туп. По поводу БД не стоит беспокоиться. К тому же я написал:
"У меня в БД хранится большей текст."
Там храниться первое сообщение из этой темы:
http://www.hardbmx.ru/forum/index.php?showtopic=478
Скорее varchar(3000) написать чем smalltext. А text весит много.
Повторюсь. Весь текст ХРАНИТСЯ в БД. Он уже там есть. И запрос выводит полностью текст. А на вывод на PHP идет часть.
8
16 марта 2008 года
mfender
3.5K / / 15.06.2005
Возможно, в сохранённом тексте есть непечатный символ, и PHP на нём затыкается.
12
16 марта 2008 года
alekciy
3.0K / / 13.12.2005
А ты видел, сколько у тебя выдается? Ровно 4кБ. Ни на какие мысли не наводит? ;)
12
16 марта 2008 года
alekciy
3.0K / / 13.12.2005
Цитата: mfender
Возможно, в сохранённом тексте есть непечатный символ, и PHP на нём затыкается.


Тогда скорее всего бы возращалась ошибка хотя бы в виде нотиса.

12
16 марта 2008 года
alekciy
3.0K / / 13.12.2005
Цитата: snubr

Никто не в курсе как решить проблему?


1) Убеждаемся, что в БД есть все 3000 символов. Как я понимаю, это уже выполнено.

2) Убеждаемся, что PHP полностью получил ответ от MySQL:

 
Код:
...
echo strlen($row["Answer"]);


Если и там все символы, то думаю уже понятно, в чем дело? ;)


[COLOR="Gray"][SIZE="1"]P.S. Если нет, курить в строну буферизации вывода Output Control Functions и директивы output_buffering.[/SIZE][/COLOR]
8
16 марта 2008 года
mfender
3.5K / / 15.06.2005
Цитата: alekciy
Тогда скорее всего бы возращалась ошибка хотя бы в виде нотиса.


Нет. Это MySQL нотисы раздаёт. А MSSQL просто отдаёт содержимое. А сам PHP просто в поток пишет то, что понимает до того места, где затык происходит. Это Windows ставит квадратики в непонятных местах.

2.1K
16 марта 2008 года
wAngel
129 / / 23.11.2004
Цитата: mfender
Возможно, в сохранённом тексте есть непечатный символ, и PHP на нём затыкается.



Большинство функция для работы со строками в PHP 4-5 безопасны для работы с двоичными данными. Спец. символы тут не при чем.
Вернее возможен вариант, что php выводит текст полностью, а вот уже браузер заканчивает вывод строки на нулевом символе. Последняя опера например прекрасно отображает строку с нулевыми символами, но при просмотре HTML-кода страницы, на первом 0-м символе обрывается.

9.5K
16 марта 2008 года
snubr
70 / / 30.10.2006
Цитата: alekciy
1) Убеждаемся, что в БД есть все 3000 символов. Как я понимаю, это уже выполнено.

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.

12
16 марта 2008 года
alekciy
3.0K / / 13.12.2005
Цитата: snubr
Да действительно возвращает 4 кб
http://hardbmx.ru/help/TreeViewShow.php?id=36
Но в БД есть все 1 897 слов. Проверил только что. Копернул из результата запроса в Word.


Зачем? Я же привел в п.2, что нужно дописать в твой код. Если echo strlen($row["Answer"]) вернет тоже количество символов (не слов!), что и в БД, то как я уже сказал, дело в буферизации вывода в PHP. Ты P.S. в посте прочел ;) ?

9.5K
17 марта 2008 года
snubr
70 / / 30.10.2006
Цитата: alekciy
1) Убеждаемся, что в БД есть все 3000 символов. Как я понимаю, это уже выполнено.

2) Убеждаемся, что PHP полностью получил ответ от MySQL:
 
Код:
...
echo strlen($row["Answer"]);


Если и там все символы, то думаю уже понятно, в чем дело? ;)


[COLOR="Gray"][SIZE="1"]P.S. Если нет, курить в строну буферизации вывода Output Control Functions и директивы output_buffering.[/SIZE][/COLOR]



Да я прочел. Просто я в 2007 Офиссе не мог найти сколько символов.
2. Более 12 000 символов запрос выдает.
Но я не понял в чем проблема вывода этих символов.

256
17 марта 2008 года
foxweb
1.0K / / 27.07.2005
Цитата: snubr
2007 Офисс



О, Господи...

12
17 марта 2008 года
alekciy
3.0K / / 13.12.2005
Цитата: snubr
Да я прочел. Просто я в 2007 Офиссе не мог найти сколько символов.
2. Более 12 000 символов запрос выдает.
Но я не понял в чем проблема вывода этих символов.


Офис то тут каким боком? Если echo strlen($row["Answer"]) вернуло такое же количество символов, что и в БД, то причину я тебе уже указал. Впрочем как и возможное решение.

9.5K
17 марта 2008 года
snubr
70 / / 30.10.2006
мне в БД было ленво тогда просматривать сколько символов. Я копернул из БД и посмотрел в worde весь ли текст или нет. Так вот там я и посмотрел сколько символов. Более 12 000 символов. А strlen($row["Answer"]) верул 4096. Как видно не совпадает.
Как это решать?
12
17 марта 2008 года
alekciy
3.0K / / 13.12.2005
Вот и копай в сторону буферизации: при выводе из мускула, при принятии данные в пхп.
9.5K
17 марта 2008 года
snubr
70 / / 30.10.2006
Если ты знаешь как решить данную проблему может скажешь или ты просто предположил. Мускул я не люблю.
12
17 марта 2008 года
alekciy
3.0K / / 13.12.2005
Цитата: snubr
Если ты знаешь как решить данную проблему может скажешь или ты просто предположил. Мускул я не люблю.


Конкретно с данной ситуацией я не сталкивался. Но по косвенным признакам можно сделать предположение, что проблема в буферах. В нормально настроеной системе такого возникнуть не должно было, буфер должен заполняться данными, отправляться на клиент, очищаться и буферизовать новую порцию данных. Поэтому какую конкретно опцию нужно изменить в твоем случае ни кто не знает. Я тебе очертил круг настроект в которых нужно порыться. Ищи.

9.5K
19 марта 2008 года
snubr
70 / / 30.10.2006
Цитата: alekciy
Конкретно с данной ситуацией я не сталкивался. Но по косвенным признакам можно сделать предположение, что проблема в буферах. В нормально настроеной системе такого возникнуть не должно было, буфер должен заполняться данными, отправляться на клиент, очищаться и буферизовать новую порцию данных. Поэтому какую конкретно опцию нужно изменить в твоем случае ни кто не знает. Я тебе очертил круг настроект в которых нужно порыться. Ищи.



Дело не в буфере. Это настройки 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


 
Код:
mssql_query("SET TEXTSIZE 65536",$conexion);  
ini_set( 'mssql.textlimit' , '65536' );  
ini_set( 'mssql.textsize' , '65536' );



А просот ini_set без mssql_query, ничего не меняет.
Может кто поможет разобраться?!
12
19 марта 2008 года
alekciy
3.0K / / 13.12.2005
Цитата: snubr

Вот только я не могу понять, что тут вставлять под $conexion


http://ru2.php.net/manual/ru/function.mssql-query.php
Это не обязательный параметр. Указание на то соединение, к которому это нужно применить.

12
19 марта 2008 года
alekciy
3.0K / / 13.12.2005
http://msdn2.microsoft.com/en-us/library/ms186238.aspx
Цитата:

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ГБ твоих должны где-то храниться до отдачи на клиент. СУБД их отдавать само не будет.

9.5K
19 марта 2008 года
snubr
70 / / 30.10.2006
Хорошо, я не буду спорить по поводу буфера, но я уже сним ворочился. Чистил, создавал, отключал....
Дело в том, что в php.ini стоит настройка, что максимум выводить 4096 символов. Ну точнее это по умолчанию стоит. И можно её менять на время сеанса. Но похоже реально не там стоит этот файл. Пойду опять с сапортом болтать.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог