복붙노트

[SQL] PHP도 INI 값을 설정 한 후, MSSQL BLOB 데이터 (4096b)를 절단한다. 나는 하나의 실종?

SQL

PHP도 INI 값을 설정 한 후, MSSQL BLOB 데이터 (4096b)를 절단한다. 나는 하나의 실종?

나는 테이블을 통해 이동하고 외부 파일에 각 레코드에서 VARBINARY (최대) BLOB 데이터를 추출하는 PHP 스크립트를 쓰고 있어요. 데이터가 정확히 4096에서 잘립니다 - 코드 완벽하게 작동되고 파일이 4096b 위에있을 때를 제외하고 (나는 일부 이미지를 통해 갈 거의 동일한 코드를 사용).

나는 어떤 성공하지 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>");
     }
 } 
?>

산출

해결법

  1. ==============================

    1.대신 0으로 odbc.defaultlrl을 설정하는 대신 실제 값으로 설정하십시오 :

    대신 0으로 odbc.defaultlrl을 설정하는 대신 실제 값으로 설정하십시오 :

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

    2.당신은 MSSQL (FreeTDS를)를 사용하는 경우, 설정에 대한 /etc/freetds.conf에 보면 "텍스트 크기"라고합니다. 광산은 64512로 설정하고 내 이미지가 잘리지하던 그대로였습니다. 나는 5메가바이트 (5242880)로 설정하고 지금은 매력처럼 일하고있어.

    당신은 MSSQL (FreeTDS를)를 사용하는 경우, 설정에 대한 /etc/freetds.conf에 보면 "텍스트 크기"라고합니다. 광산은 64512로 설정하고 내 이미지가 잘리지하던 그대로였습니다. 나는 5메가바이트 (5242880)로 설정하고 지금은 매력처럼 일하고있어.

    text size = 5242880
    
  3. ==============================

    3.설명서에서이 의견에 따르면, 당신은 당신의 사건이 될 것 같지 않는, 연결하기 전에 INI 설정을 설정해야합니다.

    설명서에서이 의견에 따르면, 당신은 당신의 사건이 될 것 같지 않는, 연결하기 전에 INI 설정을 설정해야합니다.

  4. ==============================

    4.나는이 고대 알고,하지만 난 다르게이 문제를 해결했다. 위해서는 ini_set이 mysql.text 제한 또는 mssql.textsize에 대한 작업을하지 않는,이 php.net에 설명되어 있습니다.

    나는이 고대 알고,하지만 난 다르게이 문제를 해결했다. 위해서는 ini_set이 mysql.text 제한 또는 mssql.textsize에 대한 작업을하지 않는,이 php.net에 설명되어 있습니다.

    php.ini 파일에 4096b (4K)에 이러한 기본 둘. 더 높은 값이 재설정하고 그것을 잘 작동합니다.

    망가 후 다시 시작 아파치 서비스에 잊어 버려.

  5. from https://stackoverflow.com/questions/4500506/php-is-truncating-mssql-blob-data-4096b-even-after-setting-ini-values-am-i-m by cc-by-sa and MIT license