لدي خطأ PHP SOAP غامض على مضيفي، لكن لا يمكنني التكرار محليًا

StackOverflow https://stackoverflow.com/questions/426747

  •  06-07-2019
  •  | 
  •  

سؤال

لقد واجهت خطأ PHP/SOAP مثيرًا للاهتمام مما أعاقني.بعد البحث لم أجد تفسيرا معقولا، وأقدر مساعدتكم.وهنا الخلفية:

لدي موقع مبني بلغة PHP/CodeIgniter الذي يستخدم SOAP للتواصل عبر SSL مع نظام خلفي يوفره طرف ثالث (دعنا نسميها "الشركة X" لحماية الأبرياء) وليس تحت سيطرتي.انطلاقًا من روح MVC الجيدة، قمت بوضع الكود الخاص بالتفاعل مع مصدر البيانات هذا في نموذج منفصل (system/application/models/company_x.php).لقد قمت بالتطوير محليًا باستخدام MAMP على جهاز Mac الخاص بي، وكان كل شيء تقريبًا سلسًا نسبيًا من خلال الاختبار والتطوير؛بما في ذلك الاتصال بخدمة الويب الخاصة بالشركة X عبر SSL.ربما يجب أن أذكر أن خدمة الويب الخاصة بهم تحتوي على WSDL غريب لم يعجبه SOAP الخاص بـ PHP 5.أشياء مثل المعلمات المطلوبة التي لم تكن موجودة.لقد كان من الغريب بعض الشيء أن نطلق على أساليب SOAP بشكل واضح للغاية، لكنني قمت بتنفيذها ونجحت من خلال الاختبار.حتى أنني قمت بنشره في موقع اختبار في موسو, ، ويمكنني أن أقسم أن الأمر نجح لبعض الوقت هناك أيضًا.

تخيل دهشتي عندما تبدأ كل مكالمة إلى خدمة الويب SOAP في إنتاج أخطاء مثل ما يلي:

    A PHP Error was encountered
    Severity: Warning
    Message: SoapClient::__doRequest() [soapclient.--dorequest]: 
    WARNING: URL fopen access
    Filename: models/company_x.php
    Line Number: 86

لم تقدم سجلات الأخطاء أي معلومات أخرى بخلاف المسار الكامل لملف النموذج الموجود على الخادم.إنه يعمل محليًا، واعتقدت أنه يعمل على Mosso من قبل.ربما قام Mosso بتغيير إعداداته وتعطيل SOAP أو شيء من هذا القبيل.القليل phpinfo() في وقت لاحق، ولديهم أكثر من كافية.اعتقدت أنه ربما يكون جهاز Mac الخاص بي أكثر تسامحًا مع شهادة SSL.ففي النهاية، ربما تكون هذه شهادة GoDaddy *.domain.com fopen يواجه صعوبة في المرور.لقد قمت بإعداد ملف اختبار للاتصال عبر SSL، ووضعته على Mosso وقد نجح.

أنا أتساءل لماذا fopen الوصول فجأة مشكلة للصابون؟ما الذي يجعل موسو هذا الأمر صعبًا فجأة؟هل أحتاج إلى تجاوز بعض php.ini جلسة؟هل يمكن أن يكون الأمر مختلفًا تمامًا، كما هو الحال في كثير من الأحيان مع وجود أخطاء غير مفيدة كهذه؟

تحديث: إليك أمر التكوين من phpinfo():

'./configure' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-curl' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-png' '--with-pspell' '--with-expat-dir=/usr' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--enable-track-vars' '--enable-trans-sid' '--enable-yp' '--enable-wddx' '--with-kerberos' '--enable-ucd-snmp-hack' '--with-unixODBC=shared,/usr' '--enable-memory-limit' '--enable-shmop' '--enable-calendar' '--enable-dbx' '--enable-dio' '--with-ming' '--with-mime-magic' '--with-sqlite=shared' '--with-libxml-dir=/usr' '--with-xml' '--with-system-tzdata' '--with-apxs2=/usr/sbin/apxs' '--without-mysql' '--without-gd' '--without-odbc' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-pdo' '--disable-xmlreader' '--disable-xmlwriter' '--disable-json'

ملحوظة:تعليقي تحت ذلك phpinfo() تقارير تفيد بأن اللف مسموح به؛غريب!

هل كانت مفيدة؟

المحلول 3

حسنًا، تحديث بسيط لهذه المشكلة:الخطأ في ظروف غامضة اختفى دون أي تغيير مني.يجب أن أفترض أنه كان هناك خطأ غريب في التكوين في Mosso وتم إصلاحه بصمت.ومن الممكن أيضًا أن تكون هناك مشكلة في إعداد الشركة X.هذا هو أسوأ نوع من إصلاح المنظمة البحرية الدولية!شكرا على أية حال لكل من نظر في هذا.

نصائح أخرى

قد يكون لديك هذاhttp://us.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

مفتقد.

تذكر أنه يمكنك دائمًا استخدام phpinfo() لمقارنة البيئة بين الأجهزة بشكل مرئي.

احتمال آخر (من مستندات PHP):

ملحوظة:عند تمكين الوضع الآمن، تتحقق PHP مما إذا كان الدليل الذي يعمل فيه البرنامج النصي يحتوي على نفس UID (المالك) مثل البرنامج النصي الذي يتم تنفيذه.

يحرر:همم..لا أرى الوضع الآمن في خيارات ترجمة PHP الخاصة بك، لذا ربما لا يكون الأمر كذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top