PHP ist das abschneiden MSSQL Blob-Daten (4096b), auch nach Einstellung der INI-Werte. Übersehe ich eine?
Ich Schreibe ein PHP script, das geht durch eine Tabelle und extrahiert die varbinary(max)
blob-Daten aus jedem Datensatz in einer externen Datei. Der code funktioniert perfekt (ich habe praktisch den gleichen code zu gehen durch einige Bilder), außer wenn Sie eine Datei über 4096b - die Daten werden abgeschnitten, genau 4096.
Habe ich geändert, die Werte für mssql.textlimit
, mssql.textsize
, und odbc.defaultlrl
ohne Erfolg.
Bin ich hier etwas fehlt?
<?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>");
}
}
?>
AUSGABE
Versucht ... projectPhotos/docs/Datei1.pdf
Fertig (4096)Versucht ... projectPhotos/docs/file2.zip Fertig (4096)
Versucht ...
projectPhotos/docsv3.pdf Gemacht (4096)etc..
InformationsquelleAutor Dutchie432 | 2010-12-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Anstatt
odbc.defaultlrl
zu0
, versuchen Sie es zu einem tatsächlichen Wert statt:0
war so gut wie nicht zu limitieren... auch wenn das nicht der Fall ist, warum würde es noch limit auf 4096? komisch. Danke! Haben Sie eine Ahnung, was der max-Wert für diese ist?0
ungültig ist, so dass Sie nicht überschreiben Sie den vorhandenen Wert.2,5 Jahre später hatte ich dieses problem WIEDER - und wieder-fand diesen alten Beitrag. Komisch.
Eigentlich
0
ist gültig, aber es bedeutet "passthru".Schön! Vielen Dank 🙂
InformationsquelleAutor Jordan Ryan Moore
Wenn Sie mssql (freetds), schauen Sie in /etc/freetds.conf für eine Einstellung namens "text size". Mir war 64512 und das ist genau das, was meine Bilder abgeschnitten wurden. Ich habe es auf 5 MB (5242880) und es funktioniert wie ein Charme jetzt.
InformationsquelleAutor gpayne_007
Laut dieser Kommentar in der Anleitung, müssen Sie die INI-Einstellungen vor dem anschließen, die nicht scheinen zu sein Ihr Fall.
common.php
also ich denke, das ist wahrscheinlich nicht das Problem, es sei denn, ich bin fehlt etwas. Ich werde zu aktualisieren meinem Beitrag, zu reflektieren, dass die Verbindung Lage. Vielen Dank für den input, aber (ich habe nicht nach unten Stimmen Sie).Mach dir keine sorgen. (-2 Ruf OMG!!!!) Downvoter sollte die FAQ gelesen. 🙂 Trotzdem, noch nach den Kommentaren im PHP-Handbuch, der code in Jordanien beantworten die oben genannten scheinen einen Unterschied zu machen.
InformationsquelleAutor netcoder
Ich weiß, das ist uralt, aber ich löste das anders. ini_set nicht wok für mssql.textlimit oder mssql.textsize, dies ist dokumentiert auf der php.net.
Diese beiden standardmäßig auf 4096b (4k) im php.ini-Datei. Setzen Sie diese auf einen höheren Wert und es funktioniert gut.
Vergessen Sie nicht den Neustart des httpd-Dienst nach.
InformationsquelleAutor Dave