#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 по умолчанию.