Я пишу 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 после.