2015-01-23 12 views
10

मैं Symfony2 के अपने उत्पादन तैनाती के साथ कुछ समस्या आ रही है,simplexml_load_file(): आई/ओ चेतावनी: बाहरी संस्था लोड करने में विफल " /user-bundle/Resources/config/doctrine/model/User.orm.xml

मैंने कई समाधानों की कोशिश की है, लेकिन कोई भी काम नहीं किया है। ,

(!) Fatal error: Uncaught exception 'Symfony\Component\Debug\Exception\ContextErrorException' with message 'Warning: simplexml_load_file(): I/O warning : failed to load external entity "/home/user/symfony/vendor/friendsofsymfony/user-bundle/Resources/config/doctrine/model/User.orm.xml"' in /home/user/symfony/app/bootstrap.php.cache on line 2998 
(!) Symfony\Component\Debug\Exception\ContextErrorException: Warning: simplexml_load_file(): I/O warning : failed to load external entity "/home/user/symfony/vendor/friendsofsymfony/user-bundle/Resources/config/doctrine/model/User.orm.xml" in /home/user/symfony/vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/XmlDriver.php on line 736 
Call Stack 
# Time Memory Function Location 
1 0.0000 262880 {main}() ../app_dev.php:0 
2 0.0015 572736 Symfony\Component\HttpKernel\Kernel->handle() ../app_dev.php:79 
3 0.1342 4023952 Symfony\Component\HttpKernel\DependencyInjection\ContainerAwareHttpKernel->handle() ../bootstrap.php.cache:2376 
(!) LogicException: Request stack is empty in /home/user/symfony/app/bootstrap.php.cache on line 2998 
Call Stack 
# Time Memory Function Location 
1 0.3330 7110120 Symfony\Component\Debug\ErrorHandler->handleException() ../classes.php:0 
2 0.3331 7119696 Symfony\Component\Debug\ErrorHandler->handleException() ../classes.php:1939 

मैं अपने php संस्करण को अपग्रेड करने के लिए (मैं php 5.4.x में था और 5.6.4 में अब) की कोशिश की है:

मैं बेतरतीब ढंग से जब उत्पादन वातावरण पर मेरे सिम्फोनी आवेदन तक पहुँचने में यह त्रुटि है

मैं lixml2 संस्करण को अपग्रेड करने के लिए कोशिश की है (मैं अब 2.8.0 में हूँ, लेकिन मैं पहले से ही 2.9.3 में उन्नयन करने की कोशिश की)

मैं constated गया है php में इस्तेमाल किया libxml के संस्करण हमेशा होता है कि 2.8.0, लेकिन, मुझे इसे बदलने का तरीका नहीं मिला है,

मैंने chmod 777

में सिम्फनी की सभी निर्देशिका सेट करने का प्रयास किया है मेरा सर्वर एक डेबियन 7.5 सर्वर है।

हो सकता है कि कोई है जो जानता है कि इस त्रुटि मुझे

यहाँ मदद कर सकते हैं विभिन्न के लिए कुछ लिंक को इससे संबंधित सवाल यह है:

Random Error, FOSUserBundle Error और Service error

मैं उन्हें पोस्ट नहीं किया क्योंकि वे सब पुरानी

[संपादित करें]

मैं एक qu पाया रहे हैं ick ठीक है, लेकिन यह विक्रेताओं में है, तो यह सिद्धांत अद्यतन के पहले अद्यतन में overrided किया जाएगा:

XmlDriver.php में QuickFix लाइन 737

$xmlElement = @simplexml_load_file($file); 
if(!$xmlElement){ 
     $xmlData = file_get_contents($file); 
     $xmlElement = simplexml_load_string($xmlData); 
} 
+0

आप और अधिक कैसे आपने समस्या को ठीक व्याख्या कर सकते हैं? धन्यवाद ... –

+0

इस तथ्य के अलावा कि आप विक्रेता को बदलते हैं जो खराब है, एक घातक त्रुटि को छिपाने के लिए @ जोड़ना बुरा है, आपकी PHP स्क्रिप्ट बंद हो जाती है और आपको यह भी एहसास नहीं होता है, यह बिना त्रुटि के ठीक दिखता है लेकिन आप कुछ देखेंगे इसके बिना अजीब व्यवहार क्यों। –

+0

हां, मुझे पता है कि यह क्विकफिक्स समाधान नहीं है, लेकिन यह कुछ भी नहीं है! – PyRowMan

उत्तर

0

हम इस त्रुटि के बाद हम अपने कोड में libxml_disable_entity_loader(true); उपयोग शुरू कर दिया गया। XXE -attacks को रोकने में यह कोड महत्वपूर्ण है (here में इसकी अधिक जानकारी)। यदि आपके पास आपके कोड में ऐसा नहीं है, तो हो सकता है कि आपने एक बंडल स्थापित/अपडेट किया हो जिसमें कोड की उस पंक्ति का उपयोग हो। ध्यान दें कि libxml_disable_entity_loader() धागा सुरक्षित नहीं है, इसलिए यदि उस थ्रेड पर कोड का एक टुकड़ा है जो उस रेखा को निष्पादित करता है, तो उस सर्वर पर सबकुछ अब पूरे प्रक्रिया में सक्षम है।

एफओएस-बंडल एक्सएमएल-परिभाषाओं का उपयोग करने लगता है, बदले में उनमें बाहरी संस्थाएं हैं। हालांकि कुछ भी बड़ा नहीं है, लेकिन वह कोड एफओएस-बंडल विधियों को उन फ़ाइलों का सही उपयोग करने से रोकता है।

सौभाग्य से, हमारी सेवा केवल एक ही स्थान पर उस त्रुटि हो गया, और ठीक स्पष्ट था: कोड के उस टुकड़े जहां त्रुटि से आता है निष्पादित करने से पहले एक libxml_disable_entity_loader(false); जोड़ें, और सही कोड के उस टुकड़े के बाद libxml_disable_entity_loader(true); जोड़ें। इस तरह उपयोगकर्ता बंडल xml लोड कर सकता है: इसकी आवश्यकता है, लेकिन सुरक्षा से समझौता नहीं किया गया है।

उदाहरण:

libxml_disable_entity_loader(false); 
$user = $query->getOneOrNullResult(); // This generates an error if entity loader is disabled 
libxml_disable_entity_loader(true); 
संबंधित मुद्दे