4

varbinary(max)テーブルを調べて、各レコードからblobデータを外部ファイルに抽出するPHPスクリプトを作成しています。ファイルが4096bを超えている場合を除いて、コードは完全に機能しています(私は、いくつかの画像を調べるために実質的に同じコードを使用しました)-データは正確に4096で切り捨てられます。

、、の値を変更しましたが、mssql.textlimit成功mssql.textsizeodbc.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)

等..

4

4 に答える 4

14

に設定する代わりに、代わりに実際の値に設定してみてくださいodbc.defaultlrl0

ini_set("odbc.defaultlrl", "100K");
于 2010-12-21T15:01:28.243 に答える
5

mssql(freetds)を使用している場合は、/ etc/freetds.confで「テキストサイズ」と呼ばれる設定を探してください。私の画像は64512に設定されていて、それが私の画像が切り捨てられていたものです。5MB(5242880)に設定しましたが、今ではチャームのように機能しています。

text size = 5242880
于 2015-09-04T18:51:21.770 に答える
1

マニュアルのこのコメントによると、接続する前にINI設定を設定する必要がありますが、これはあなたの場合ではないようです。

于 2010-12-21T14:59:03.543 に答える
1

私はこれが古代であることを知っていますが、私はこれを別の方法で解決しました。ini_setはmssql.textlimitまたはmssql.textsizeに対して動作しません。これは、php.netに記載されています。

これらは両方とも、php.iniファイルではデフォルトで4096b(4k)になっています。これらをより高い値にリセットすると、正常に機能します。

後でhttpdサービスを再起動することを忘れないでください。

于 2013-04-19T17:04:54.687 に答える