سؤال

تحديث (5/21/2010) النجاح!

لذلك بعد الكثير من $ Head-> Desk () 'ing ، لقد قمت بحلها.

تذكر الأطفال ، كن حذرًا من إصدار العميل الفوري الذي تستخدمه ، ويعتمد على إعدادات المحاكاة الافتراضية!

كنت قد قمت بتثبيت العميل الفوري العام (لا أدرك أن خوادم ESX الخاصة بنا تجلس على معالجات AMD ، وليس Intel) والتي عملت بشكل جيد داخليًا (كان تثبيت CentOS 32 بت لأن خوادم ESXI الداخلية لدينا ليست 64 بت). حسنًا ، حتى إذا كان لديك تثبيت 32 بت يعمل على خادم افتراضي يجلس على AMD64 ، فلا يزال من المهم ما العميل الفوري الذي تقوم بتثبيته.

كان آخر شيء فكرت في التحقق منه ولكن كما يظهر ، كل شيء يعمل بشكل جيد الآن.

أود أن أشكر كل من ساعدني في الركض في كل اختبار ممكن لمعرفة ذلك ولكن في النهاية ، كان خطأي لعدم إدراك الاختلافات في الافتراضات.


تحديث (5/21/2010)اعتقدت أن هذا الخطأ قد هربني عندما قمت بتثبيته على VM جديد داخليًا ، لكنني وجدت الآن رابطًا ضيقًا.

كنت أحاول تثبيت هذا على خادم الإنتاج الخاص بنا عندما نشرت هذا. بعد أسبوع من عدم التقدم وأحتاج إلى العودة إلى التطوير ، قمت بتجهيز VM على الخادم الداخلي الخاص بنا مع تثبيت جديد من الهراء ... centos ، والتركيبات الطازجة للعميل الفوري و OCI8.

عملت تماما.

ومع ذلك ، قمنا للتو بتحميل نسخة دقيقة من VM إلى خوادم الإنتاج الخاصة بنا ولم تعد تعمل بطريقة سحرية. حاول إعادة تثبيت كل شيء ، دون جدوى.

لذا فإن الأشياء الوحيدة التي يمكنني تضييقها إليها هي مشكلة جدار الحماية (على الرغم من أنني أحصل على نفس المشكلة عند تجربة 127.0.0.1) أو ربما مشكلة خادم ESX (خوادم الإنتاج) ، فإن الخوادم الداخلية تعمل ESXI.

أي أفكار؟

تحديث (3/8/2010) لقد قمت بتثبيت xDebug وجعلها تتبع الكود الخاص بي. هذا هو الإخراج الذي أحصل عليه:

TRACE START [2010-03-08 17:53:05]
    0.2090     327864   -> {main}() /data/aims3/http/octest.php:0
    0.2091     327988     -> ini_set(string(14), string(1)) /data/aims3/http/octest.php:3
    0.2093     327920     -> error_reporting(long) /data/aims3/http/octest.php:4
    0.2094     328048     -> oci_connect(string(8), string(8), string(25)) /data/aims3/http/octest.php:6

يتوقف التتبع في تلك المرحلة.

لقد قمت بتثبيت كل شيء بنفس الطريقة على خادم محلي ويعمل بشكل جيد. أن أقول إنني في خسارة كاملة سيكون وضعه بخفة.


*ملاحظة: ركضت اجعل الاختبار وعاد الفشل في كل اختبار. لم أقم بتشغيل هذا على آلة العمل الخاصة بي لمعرفة ما إذا كانت تقارير نفس الأخطاء. أي فكرة لماذا إجراء الاختبار سيفشل ولكن جعل لا الإبلاغ عن أي خطأ؟

لقد قمت بتثبيت Oracle InstantClient مع عدم وجود أخطاء تم الإبلاغ عنها إلى جانب حزمة OCI8 PECL وفي خسارة. كلما حاولت فتح اتصال مع OCI_CONNECT ، فإنه يوقف البرنامج النصي PHP بالكامل.

مثال:

<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);
echo "before";
$conn = oci_connect("username", "password", "host");
echo "after";
?>

إرجاع صفحة فارغة كاملة. يتم تحميل الوحدة النمطية (شوهد في phpinfo) وكل شيء مثبت بدون أخطاء.

أنا في حيرة كاملة.

Centos: 5.4

Apache: 2.2.3

PHP: 5.3.1

InstantClient: 11.2

OCI8: 1.4.1

أي أفكار؟

ملحوظات

سجل أخطاء Apache لا شيء

محاولة تصحيح:

1:

<?php
ini_set ("display_errors", "1");
error_reporting(E_ALL);
echo "before";
if(!function_exists('oci_connect')) die('Oracle Not Installed');
echo "after";
?>

عائدات:

beforeafter

2:

تغيير المضيف إلى // المضيف

عائدات:

نفس الخطأ

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

المحلول 5

تم اصلاحه. راجع الجزء العلوي للحصول على التفاصيل ولكن هنا هي ملاحظات الهاوية: بيئات الافتراضية مهمة.

نصائح أخرى

هل هناك أي شيء في error_log من Apache؟ هل هذا mod_php أو fastcgi أو cgi php العادي؟ ماذا يحدث إذا قمت بتشغيل البرنامج النصي عبر سطر الأوامر؟

يمكنك أيضًا محاولة الإعداد سجل خطأ PHP والنظر هناك.


EDIT1: محاولة:

echo "before";
if(!function_exists('oci_connect')) die('Oracle Not Installed');

ونشر النتائج ...


EDIT2: لست متأكدًا حقًا. أفضل رهان لي هو هذه المعلومات من دليل PHP:

المشكلة الأكثر شيوعًا في تثبيت OCI8 هي عدم وجود بيئة Oracle بشكل صحيح. يظهر هذا عادةً كمشكلة باستخدام OCI_CONNECT () أو OCI_PCONNECT (). قد يكون الخطأ خطأ PHP مثل استدعاء الدالة غير المحددة OCI_CONNECT () ، أو خطأ ORACLE مثل ORA-12705 ، أو حتى تحطم Apache. تحقق من ملفات سجل Apache للحصول على أخطاء بدء التشغيل وشاهد الأقسام أعلاه لحل هذه المشكلة.

أي شخص آخر لديه أي أفكار لمساعدة برايان؟

برايان ،

سأكون صادقًا: لقد جربت هذا منذ عامين وفشلت فشلاً ذريعًا. :) لم أستطع الحصول على وظائف OCI للعمل من أجل أي شيء من خلال تجميع نفسي.

لكن من أجل إنجازه ، بحثت عن حل بديل ووجدته في Zend Core لـ Oracle. كل ما فعلته هو التنزيل ، تشغيل المثبت ، وتم القيام به. يقوم بتثبيت APACHE/PHP ، MySQL (اختياري) ، و stantclient لك.

الآن كخادم Zend ، هو في الأساس نفس المنتج. أدرك أن هذا قد لا يكون الحل الذي كنت تأمل فيه ، ولكن إذا نجح ...

خادم Zend

هل تتصل بجهاز التحكم عن بُعد أو إلى DB المحلي؟ أعتقد ، بالنسبة لـ LocalHost ، يجب أن تحل محل "Host" بـ "false". آمل أن يكون هذا سيساعدك...

تحرير: أعتقد أنك تفتقد معلمة ... اقتراحاتي الأخيرة هي: 1. يجب عليك تعيين المنفذ (افتراضي 1521) و/أو 2. يجب عليك إدخال اسم DB و/أو يجب عليك تعيين اسم المثيل ( المعلمة ORACLE_SID)

لا يمكنك أبدًا التحقق من قيمة الإرجاع لـ OCI_CONNECT () أو استدعاء OCI_ERROR () ولكنها لا تبدو ذات صلة بمشكلتك حيث يبدو أنك تعاني من تحطم PHP. هناك خطأ مفتوح لـ Rhel قد يؤثر عليك أيضًا:

http://pecl.php.net/bugs/bug.php؟id=16626

هل قمت ببناء حزمة OCI8 بنفسك؟ هل تستخدم ثنائي طرف ثالث؟

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