Я выполняю этот запрос на сервере MSSQL с сервера Ubuntu Linux 16.04:
SELECT binaryImage FROM mytable;
Ну, я получил двоичное содержимое моего изображения и с помощью base64_encode()
Функция в PHP может отображать изображения.
"<img src='data:image/jpeg;base64,".base64_encode($binaryImage)."'/>"
Работает отлично.
Но когда я выполняю тот же запрос в той же базе данных, но из Windows Server 2012 R2, двоичное содержимое отличается и не может отображать изображение.
Кроме того, я сделал var_dump()
чтобы увидеть, какой двоичный контент извлекается в каждом случае и отличается в Linux и Windows Server. На обоих я использую sqlsrv_pdo для php7.
Я не знаю, что происходит … Мне нужно работать на Windows Server 2012 R2. Может быть, кодирование или что-то подобное? Благодарю.
РЕДАКТИРОВАТЬ: слева, двоичный контент в Linux и справа, двоичный контент в Windows Server. В Linux он имеет длину около 1.000.000 символов, а в Windows — около 2.000.000
EDIT2: информация о соединении.
$database = [
'ServerName' => 'localhost',
'Database' => 'db',
'UID' => 'user',
'PWD' => 'pass',
'CharacterSet' => "UTF-8"];
$conn = new PDO(
"sqlsrv:server={$database['ServerName']};Database={$database['Database']}",
$database['UID'],
$database['PWD'],
array(
//PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
Задача ещё не решена.
Других решений пока нет …