2011-05-09 14 views
6

से एक्सेस किए जाने पर "डेटा स्रोत नाम नहीं मिला" मैं क्रिस्टल रिपोर्ट्स का उपयोग करके PHP से एक रिपोर्ट जेनरेट करने की कोशिश कर रहा हूं, कोड सही लगता है:क्रिस्टल रिपोर्ट रिपोर्ट उत्पन्न करने के लिए कोड सीएलआई में ठीक काम करता है, लेकिन ब्राउजर

<?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); 
?> 

यदि मैं कमांड लाइन से स्क्रिप्ट चलाता हूं, तो यह ठीक काम करता है, और मेरे पास पीडीएफ निर्यात और कंसोल में पार्स किया गया है।

लेकिन देखने के एक ब्राउज़र के बिंदु से, कहानी अलग है, आप अपाचे के माध्यम से अनुरोध मिलता है, मैं इस अपवाद:

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:\wamp\www\facture\report.php on line 25 

रिपोर्ट पर, डेटाबेस कनेक्शन ODBC के माध्यम से किया जाता है, मैं इसका उपयोग नहीं कर सका, क्योंकि ओडीबीसी के साथ चिह्नित किसी अन्य ड्राइवर ने काम करने से इनकार कर दिया।


+1

आप उपयोग कर रहे हैं '$ _GET [ 'आईडी']' खतरनाक तरीके से, मान्य बिना: जैसे, अगर मैं इनपुट '\\ .. \\ .. \\ .. \\ foo' मैं बाहर निकल सकते हैं वेब रूट की। –

+1

यह केवल विकास उद्देश्यों के लिए है, जब यह काम करेगा, मैं यह सुनिश्चित करने के लिए सभी शर्तों को जोड़ दूंगा कि कुछ भी गलत तरीके से नहीं निकलता है। लेकिन आपका शुक्रिया ! – PhoenixNoor

+5

क्रिस्टल रिपोर्ट शैतान का एक प्राणी है। इससे दूर रहें :) – morgar

उत्तर

0

मुझे लगता है कि आप वैंप का उपयोग कर रहे हैं। यह व्यवहार शायद उपयोगकर्ता से संबंधित है कि वेब सर्वर (अपाचे) चल रहा है।

जब आप सीएलआई से PHP चलाते हैं, तो PHP.exe को आपकी उपयोगकर्ता प्रोफ़ाइल (डेटाबेस/नेटवर्क/फाइल सिस्टम एक्सेस अधिकारों के मामले में) प्राप्त होती है; दूसरी तरफ, हैकर को सर्वर को हानिकारक और शोषण से रोकने के लिए आमतौर पर अपाचे (और आईआईएस भी) विभिन्न, अप्रतिबंधित प्रमाण-पत्रों के तहत चलता है।

Apache में, आप, httpd.conf अपाचे कॉन्फ़िग फ़ाइल (आपके मामले में यह C:\wamp\apache\conf के अंतर्गत स्थित किया जा सकता है) को संशोधित करने User और/या Group config निर्देशों को बदलने इस व्यवहार को बदल सकते हैं।

+0

आपके उत्तर पाओलो, के लिए धन्यवाद मैंने कोशिश की और यह काम नहीं किया। – PhoenixNoor

+1

@Logicbloke यह php.ini ओडीबीसी डिफ़ॉल्ट कनेक्शन सेटिंग्स के कारण हो सकता है। –

1

आपको कुछ पर्यावरणीय चर सेट करना पड़ सकता है। नीचे एक अलग ओडीबीसी ड्राइवर (नोट: ओएस एक्स पर) का उपयोग करने के लिए मुझे सेट करना था।

<?php 
    putenv("ODBCINSTINI=/path/to/odbcinst.ini"); 
    putenv("ODBCINI=/path/to/odbc.ini"); 
?> 
संबंधित मुद्दे