Domanda

Sono nuovo di CakePHP e sto solo eseguendo il processo di configurazione, ma sono sconcertato perché Cake non può accedere al mio database MySQL. La pagina delle informazioni di Cake dice che la mia directory tmp è scrivibile, FileEngine viene utilizzato per la memorizzazione nella cache (non so cosa significhi) e il mio file di configurazione del database è presente, ma che CakePHP non può connettersi al database.

Ecco i miei dettagli di configurazione:

  • PHP 5.3 (preinstallato su Snow Leopard)
  • MySQL 5.1.40 a 64 bit
  • CakePHP 1.2.4.8284

Ecco i passaggi che ho seguito:

  • Creato uno schema MySQL chiamato cake_blog
  • Creato un utente MySQL chiamato cake_blog_user
  • Concessi a cake_blog_user le autorizzazioni appropriate su cake_blog @ localhost e cake_blog @%
  • Copia il file database.php.default in database.php e modifica i dettagli della connessione al database come appropriato

Ecco i dati di configurazione rilevanti da database.php:

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

Mi sto perdendo qualcosa qui? Devo anche menzionare che se inserisco un echo mysql_error (); nel file /cake/libs/view/pages/home.ctp subito prima che verifichi la connessione al database, l'errore visualizzato è " Nessun file o directory di questo tipo. & Quot; Non ho idea di quale file o directory stia parlando.

Grazie!

È stato utile?

Soluzione

Se è il socket, basta modificare /etc/php.ini per riflettere quanto segue

pdo_mysql.default_socket=/tmp/mysql.sock

e

mysql.default_socket = /tmp/mysql.sock

Altri suggerimenti

Ciò che di solito mi morde è che MySQL pensa a "localhost" come "connetti tramite il socket unix" e "127.0.0.1" "connetti attraverso la porta TCP". Con cose come XAMPP (almeno su mac) il file socket unix non c'è. Usa semplicemente 127.0.0.1 invece.

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

Dovrebbe funzionare sempre.

Credo che tu possa anche fare quanto segue

<?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',            
    )
?>

ciò potrebbe significare che è necessario modificare il file database.php quando si va in diretta sul server di produzione.

Grazie a tutti per avermi indicato nella giusta direzione. Il file mysql.sock è stato spostato in /tmp/mysql.sock anziché nella posizione predefinita in /var/mysql/mysql.sock . La modifica del file php.ini per riflettere ciò ha risolto il problema.

controlla il tuo phpinfo e usa il socket elencato. quello ha funzionato per me.

Su Ubuntu, se hai installato entrambe le versioni 7.0 e 5.6 di PHP questo non funzionerà.

Dovrai cambiare se hai entrambe le versioni:

Guarda prima se è la versione 7.0: il comando è php -v .

Avanti

sudo a2dismod php7.0
sudo a2enmod php5.6
sudo service apache2 restart
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top