Скачивание BLOB-файла с Oracle и PHP - PullRequest
0 голосов
/ 10 августа 2010

Используя PHP, я пытаюсь загрузить BLOB-файл, который уже был загружен в базу данных Oracle 10g. Я видел и подражал многочисленным примерам, которые нашел. Когда я открываю страницу, появляется диалоговое окно «Загрузка файла», позволяющее мне открыть или сохранить. Если я нажимаю «Открыть», медиаплеер запускается, как и должен, но никогда не получает файл. Если я выбираю Сохранить, я всегда получаю сообщение об ошибке, в котором говорится: «Internet Explorer не смог открыть этот интернет-сайт. Запрошенный сайт либо недоступен, либо не найден. Повторите попытку позже»

Ниже приведен мой код, который довольно прост и очень похож на примеры, которые я нашел.

<?php

header('Content-Disposition: attachment; filename='.$_GET['fileName']);
header('Content-length: '.$_GET['fileSize']);
header('Content-type: '.$_GET['mimeType']);

require_once("Include/Application.php");

$connection = oci_connect ($userID, $password, $TNS);

$phpCur = oci_new_cursor($connection);
$stmt = oci_parse($connection, "BEGIN MOR.DOWNLOAD_ATTACHMENT (:morID, :attachmentType, :phpCur); END;");
oci_bind_by_name($stmt, ":morID", $_GET['morID'], -1);
oci_bind_by_name($stmt, ":attachmentType", $_GET['attachmentType'], -1);
oci_bind_by_name($stmt, "phpCur", $phpCur, -1, OCI_B_CURSOR);
oci_execute($stmt);
oci_free_statement($stmt);

$output = '';
oci_execute($phpCur);
while( $row = oci_fetch_array($phpCur) )
    $output .= $row['ATTACHMENT_BL'];

oci_free_statement($phpCur);

oci_close($connection);

echo $output;

exit;

?>

Ответы [ 2 ]

1 голос
/ 22 июля 2015

Сначала используйте ваш запрос в БД, и в этом случае введите поле данных BLOB:

0 голосов
/ 10 августа 2010

Добавьте больше обработки ошибок в ваш скрипт.Любая из функций oci * может завершиться ошибкой, а затем последующие шаги также завершатся неудачей.Документация сообщает вам, что произойдет в случае сбоя функции, и какое будет возвращаемое значение.Например,

Возвращаемые значенияВозвращает идентификатор соединения или FALSE при ошибке.

Если вы установили заголовок Content-type как можно позже, то есть непосредственно перед первым выводом, вы можете отправить обычный текст или HTML, который содержитвместо этого какое-то сообщение об ошибке.

<?php
// error_reporting/ini_set: for testing purposes only.
error_reporting(E_ALL); ini_set('display_errors', 1);

require_once("Include/Application.php");

$connection = oci_connect ($userID, $password, $TNS);
if ( !$connection) {
  die('database connection failed');
}

$phpCur = oci_new_cursor($connection);
if ( !$phpCur) {
  die('creating cursor failed');
}

$stmt = oci_parse($connection, "BEGIN MOR.DOWNLOAD_ATTACHMENT (:morID, :attachmentType, :phpCur); END;");
if ( !$stmt) {
  die('creating statement failed');
}

// and so on and on. Test the return values of each oci* function.

oci_close($connection);

header('Content-Disposition: attachment; filename='.$_GET['fileName']); // at least at basename() here
header('Content-length: '.$_GET['fileSize']); // strange...
header('Content-type: '.$_GET['mimeType']); // possible but still strange...
echo $output;
exit;
...