file_get_contents中的二进制文件会怎样?

时间:2018-07-30 20:55:23

标签: php drupal drupal-8

我正在尝试在php中读取文件并将其存储为sql server中的varbinary。该过程适用于文本文件,但是图像仍然有问题。

我正在使用以下行将文件内容读取为字符串,但是我不确定那不是我的问题所在:

$data = NULL;
$validators = NULL;
if($file = file_save_upload('file', $validators, FALSE, 0)){
  $data = file_get_contents($file->getFileUri());
  $filename = $file->getFilename();
}

然后我将$ data字符串传递给准备好的语句:

$conn = $this->_get_connection();

$sql = "      
  EXEC JC_Update_Document_SP
    ...
    ?,
    ...;
";

$file_input = [
  [$data, NULL, NULL, SQLSRV_SQLTYPE_VARBINARY],
];

$stmt = sqlsrv_prepare($conn, $sql, $file_input);

if(sqlsrv_execute($stmt) === false){
  die(print_r(sqlsrv_errors(), true));
}

其中$data字段馈入数据库中存储过程中的varbinary列。

我尝试的另一种方法涉及将$data varchar转换为数据库中的varbinary(max)字段,但是无论哪种方式,我都会得到损坏的图像。

所以我的问题是... file_get_contents弄乱了我的二进制数据吗?我将如何读取图像文件并将其上传到数据库以供以后检索?

1 个答案:

答案 0 :(得分:0)

我发现了bin2hex函数。我仍然不清楚为什么需要这样做,但是可以完成工作。