Armazenar detalhes DOP no php.ini
Pergunta
De acordo com a DOP documentação , você pode armazenar o login do banco de dados detalhes em php.ini, longe do arquivo php (exemplo 3). Mas não explica como armazenar nome de usuário e senha, apenas o banco de dados e host. Como você faria isso?
Este é o método usado na documentação:
[PDO]
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost"
Eu tentei adicionar o nome de usuário e senha para o anfitrião, mas não gosta: entre o nome de usuário e senha, e ele não reconhece um endereço com apenas um nome de usuário como um endereço real:
[PDO]
pdo.dsn.mydb="mysql:dbname=testdb;host=username:password@localhost"
Eu também tentei colocar o nome de usuário e senha como argumentos separados, mas ele faz not.s
[PDO]
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost;username:username;password:secret"
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost;uid:username;pwd:secret"
pdo.dsn.mydb="mysql:dbname=testdb;host=localhost;UID:username;PWD:secret"
Solução
De acordo com a documentação, isso não é possível. E provavelmente não queria. Se você olhar para o método DOP __construct()
, leva 3 argumentos:. Um DSN (que pode ser um nome a um pdo.dsn.name
definido no php.ini), um nome de usuário e uma senha
Outras dicas
Você pode armazenar o nome de usuário e senha DB em uma variável de ambiente, que é, então, disponível dentro do script PHP na superglobal $_ENV
.
AFIACT, você não pode definir uma variável de ambiente de php.ini, mas você pode configurá-lo a configuração do apache, inclusive em um arquivo .htaccess. Por exemplo.
SetEnv mysql_username dbuser
SetEnv mysql_password dbpass
Então em seu PHP você pode usar:
$db = new PDO('mydb',$_ENV['mysql_username'],$_ENV['mysql_password']);
Você também pode colocar o DSN como uma variável de ambiente para mantê-lo todos juntos.