PHP усекает данные MSSQL Blob (4096b), даже после установки значений INI. Я пропустил один?

Я пишу PHP-скрипт, который проходит через таблицу и извлекает данные varbinary(max) blob из каждой записи во внешний файл. Код работает отлично (я использовал практически тот же код для прохождения некоторых изображений), за исключением случаев, когда файл превышает 4096b – данные усекаются ровно на 4096.

Я изменил значения для mssql.textlimit , mssql.textsize и odbc.defaultlrl без каких-либо успехов.

Я что-то упустил?

 <?php ini_set("mssql.textlimit" , "2147483647"); ini_set("mssql.textsize" , "2147483647"); ini_set("odbc.defaultlrl", "0"); include_once('common.php'); //Connection to DB takes place here. $id=$_REQUEST['i']; $q = odbc_exec($connect, "Select id,filename,documentBin from Projectdocuments where id = $id"); if (odbc_fetch_row($q)){ echo "Trying $filename ... "; $fileName="projectPhotos/docs/".odbc_result($q,"filename"); if (file_exists($fileName)){ unlink($fileName); } if($fh = fopen($fileName, "wb")) { $binData=odbc_result($q,"documentBin"); fwrite($fh, $binData) ; fclose($fh); $size = filesize($fileName); echo ("$fileName<br />Done ($size)<br><br>"); }else { echo ("$fileName Failed<br>"); } } ?> 

ВЫВОД

Попытка … projectPhotos / docs / file1.pdf Выполнено (4096)

Попытка … projectPhotos / docs / file2.zip Готово (4096)

Попытка … projectPhotos / docsv3.pdf Выполнено (4096)

и т.д..

Вместо того, чтобы установить odbc.defaultlrl 0 , попробуйте установить его вместо фактического значения:

 ini_set("odbc.defaultlrl", "100K"); 

Если вы используете mssql (freetds), зайдите в /etc/freetds.conf для параметра, называемого «размер текста». Mine был установлен в 64512, и именно это урезало мои образы. Я установил его на 5 МБ (5242880), и теперь он работает как шарм.

 text size = 5242880 

Согласно этому комментарию в руководстве , вы должны установить настройки INI перед подключением , что, похоже, не так.

Я знаю, что это древний, но я решил это по-другому. ini_set не wok для mssql.textlimit или mssql.textsize, это документировано на php.net.

Оба эти значения по умолчанию равны 4096b (4k) в файле php.ini. Сбросьте их на более высокое значение, и он будет работать нормально.

Не забудьте перезапустить службу httpd после.