Код для создания отчета Crystal Reports отлично работает в командной строке, но «Имя источника данных не найдено» при доступе из браузера

#php #com #crystal-reports #command #report

#php #com #crystal-отчеты #команда #Сообщить

Вопрос:

Я пытаюсь сгенерировать отчет из PHP, используя Crystal Reports, код кажется правильным:

 <?php
set_time_limit(0);
if(isset($_GET['id']))
{
$id = $_GET['id'];
} else {
die('Please specify an ID');
}

$path = "c:\wamp\www\billing\reports";
$file = $chemin."\bill_".$id.".pdf";
$app_obj = new COM("CrystalRuntime.Application") or Die ("Did not open");
$report= $path."\bill.rpt";

$rpt_obj= $app_obj->OpenReport($report,1);
$app_obj->LogOnServer("p2ssql.dll","host","bdd","userbd","passwordbd");
$rpt_obj->EnableParameterPrompting = FALSE;
$rpt_obj->RecordSelectionFormula = "{F_DOCLIGNE.DO_Piece}='$id'";

$rpt_obj->ExportOptions->DiskFileName =  $file;
$rpt_obj->ExportOptions->PDFExportAllPages = true;
$rpt_obj->ExportOptions->DestinationType = 1;
$rpt_obj->ExportOptions->FormatType = 31; 
$rpt_obj->Export(false);

header("Content-Type: application/pdf");
readfile($file);
?>
  

Если я запускаю скрипт из командной строки, он работает просто отлично, и у меня есть PDF-файл, экспортированный и проанализированный в консоли.

Но с точки зрения браузера, история иная, если вы получаете запрос через Apache, я получаю это исключение :

 com_exception: Source: Crystal Reports ActiveX Designer
Details : IM002:[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified in C:wampwwwfacturereport.php on line 25
  

В отчете подключение к базе данных осуществляется через ODBC, я не смог этим воспользоваться, так как любой другой драйвер, помеченный ODBC, отказался работать.


Комментарии:

1. Вы используете $_GET['id'] опасно, без проверки: например, если я ввожу данные \..\..\..\foo , я могу выйти из корневого веб-каталога.

2. Это только для целей разработки, когда это сработает, я добавлю все условия, чтобы убедиться, что ничего не сбилось с правильного пути. но спасибо вам!

3. Crystal Reports — порождение дьявола. Держитесь от этого подальше 🙂

4. Какой хорошей альтернативой было бы генерировать отчеты из PHP? Заранее спасибо

5. находится ли «скрипт из командной строки» на том же компьютере, что и веб-сервер (Apache)?

Ответ №1:

Возможно, вам придется установить некоторые переменные среды. Ниже показано, что мне пришлось настроить для использования другого драйвера ODBC (примечание: в OS X).

 <?php
    putenv("ODBCINSTINI=/path/to/odbcinst.ini");
    putenv("ODBCINI=/path/to/odbc.ini");
?>
  

Ответ №2:

Я вижу, вы используете Wamp. Такое поведение, скорее всего, связано с пользователем, под которым работает веб-сервер (Apache).

Когда вы запускаете PHP из командной строки, PHP.exe наследует ваш профиль пользователя (с точки зрения прав доступа к базе данных / сети / файловой системе); с другой стороны, обычно Apache (и IIS тоже) работает под другими, непривилегированными учетными данными, чтобы предотвратить повреждение сервера хакерами и его использование.

В Apache вы можете изменить это поведение, изменив httpd.conf файл конфигурации Apache (в вашем случае он может быть расположен под C:wampapacheconf ), изменив директивы User and / или Group config.

Комментарии:

1. Спасибо за ваш ответ, Паоло, я попробовал это, и это не сработало.

2. @Logicbloke это может быть связано с настройками подключения php.ini ODBC по умолчанию.