Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP is truncating MSSQL Blob data (4096b), even after setting INI values. Am I missing one?

I am writing a PHP script that goes through a table and extracts the varbinary(max) blob data from each record into an external file. The code is working perfectly (I used virtually the same code to go through some images) except when a file is over 4096b - the data is truncated at exactly 4096.

I've modified the values for mssql.textlimit, mssql.textsize, and odbc.defaultlrl without any success.

Am I missing something here?

<?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>");
     }
 } 
?>

OUTPUT

Trying ... projectPhotos/docs/file1.pdf Done (4096)

Trying ... projectPhotos/docs/file2.zip Done (4096)

Trying ... projectPhotos/docsv3.pdf Done (4096)

etc..

like image 446
Dutchie432 Avatar asked Nov 30 '22 17:11

Dutchie432


2 Answers

Instead of setting odbc.defaultlrl to 0, try setting it to an actual value instead:

ini_set("odbc.defaultlrl", "100K");
like image 134
Jordan Ryan Moore Avatar answered Dec 10 '22 03:12

Jordan Ryan Moore


If you're using mssql (freetds), look in /etc/freetds.conf for a setting called "text size". Mine was set to 64512 and that's exactly what my images were being truncated to. I set it to 5MB (5242880) and it's working like a charm now.

text size = 5242880
like image 41
gpayne_007 Avatar answered Dec 10 '22 03:12

gpayne_007