سؤال

أنا جديد على CakePHP وأجري للتو عملية التكوين، ولكنني أشعر بالحيرة من عدم تمكن Cake من الوصول إلى قاعدة بيانات MySQL الخاصة بي.تشير صفحة معلومات الكعكة إلى أن دليل tmp الخاص بي قابل للكتابة، وأن FileEngine يُستخدم للتخزين المؤقت (لا أعرف ماذا يعني ذلك)، وأن ملف تكوين قاعدة البيانات الخاص بي موجود، ولكن لا يمكن لـ CakePHP الاتصال بقاعدة البيانات.

فيما يلي تفاصيل الإعداد الخاصة بي:

  • PHP 5.3 (مثبت مسبقًا على Snow Leopard)
  • ماي إس كيو إل 5.1.40 64 بت
  • كيكPHP 1.2.4.8284

فيما يلي الخطوات التي مررت بها:

  • تم إنشاء مخطط MySQL يسمى cake_blog
  • تم إنشاء مستخدم MySQL يسمى cake_blog_user
  • تم منح cake_blog_user الأذونات المناسبة على cake_blog@localhost وcake_blog@%
  • انسخ ملف data.php.default إلى ملف data.php وقم بتحرير تفاصيل اتصال قاعدة البيانات بالشكل المناسب

فيما يلي بيانات التكوين ذات الصلة من قاعدة البيانات.php:

    var $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'cake_blog_user',
        'password' => 'cake_blog_password',
        'database' => 'cake_blog',
        'prefix' => '',
    );

نسيت شيئا ما هنا؟يجب أن أذكر أيضًا أنه إذا قمت بإدراج ملف echo mysql_error(); في ملف /cake/libs/view/pages/home.ctp مباشرة قبل اختبار اتصال قاعدة البيانات ، فإن الخطأ المعروض هو "لا يوجد ملف أو دليل." ليس لدي أي فكرة عن الملف أو الدليل الذي يتحدث عنه.

شكرًا!

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

المحلول

إذا كان هو المقبس، فقط قم بتحرير /etc/php.ini ليعكس ما يلي

pdo_mysql.default_socket=/tmp/mysql.sock

و

mysql.default_socket = /tmp/mysql.sock

نصائح أخرى

ما يضايقني عادةً هو أن MySQL تفكر في "المضيف المحلي" على أنه "الاتصال عبر مقبس يونكس" و"127.0.0.1" "الاتصال عبر منفذ TCP".مع أشياء مثل XAMPP (على الأقل في نظام التشغيل Mac)، لا يكون ملف مقبس Unix موجودًا. فقط استخدم 127.0.0.1 بدلاً من.

var $default = array(
    'driver' => 'mysql',
    'persistent' => false,
    'host' => '127.0.0.1',
    'login' => 'cake_blog_user',
    'password' => 'cake_blog_password',
    'database' => 'cake_blog',
    'prefix' => '',
);

ينبغي أن تعمل في كل وقت.

أعتقد أنه يمكنك أيضًا القيام بما يلي

<?php
    public $default = array(
        'driver' => 'mysql',
        'persistent' => false,
        'host' => 'localhost',
        'login' => 'cake_blog_user',
        'password' => 'cake_blog_password',
        'database' => 'cake_blog',
        'prefix' => '',
        'port' => '/tmp/mysql.sock',            
    )
?>

قد يعني القيام بذلك أنك بحاجة إلى تحرير ملف data.php عند بدء البث المباشر على خادم الإنتاج.

شكرا للجميع لتوجيهي في الاتجاه الصحيح.تم نقل ملف mysql.sock إلى /tmp/mysql.sock بدلاً من موقعه الافتراضي في /var/mysql/mysql.sock.أدى تحرير ملف php.ini ليعكس ذلك إلى حل المشكلة.

تحقق من phpinfo الخاص بك واستخدم المقبس المدرج.التي عملت بالنسبة لي.

على Ubuntu، إذا قمت بتثبيت الإصدارين 7.0 و5.6 من PHP، فلن يعمل هذا.

ستحتاج إلى التبديل إذا كان لديك كلا الإصدارين:

انظر أولاً إذا كان الإصدار 7.0:الأمر هو php -v.

افعل التالي

sudo a2dismod php7.0
sudo a2enmod php5.6
sudo service apache2 restart
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top