Preparando-se para executar PHP com MongoDB
Avalie esse Início rápido
Bem-vindo a este guia de início rápido para MongoDB com PHP. Sabemos que você provavelmente está interessado em começar a escrever código e criar aplicativos usando PHP com MongoDB. Nós chegaremos lá, eu prometo. No entanto, vamos Go por algumas configurações necessárias primeiro.
Este guia está organizado em algumas seções em alguns artigos. Este primeiro artigo aborda a instalação e configuração do seu ambiente de desenvolvimento. PHP é uma linguagem integrada de desenvolvimento web. Existem vários componentes que você normalmente usa em conjunto com a linguagem de programação PHP. Se você já tiver o PHP instalado e só quer começar a usar o PHP e o MongoDB, fique à vontade para pular para opróximo artigo desta série.
Vamos começar com uma visão geral do que abordaremos nesta série.
Uma breve observação sobre PHP e Apache: como o PHP é principalmente uma linguagem web — o que significa que ele foi criado para funcionar com um servidor web — passaremos algum tempo no início deste artigo garantindo que você tenha PHP e Apache web servidor instalado e configurado corretamente. Existem alternativas, mas vamos nos concentrar em PHP e Apache.
O PHP foi desenvolvido e lançado pela primeira vez em 1994 por Rasmus Lerdorf. Embora tenha suas raízes na linguagem C, a sintaxe do PHP era muito parecida com a do Perl desde o início. Um dos principais motivos de sua enorme popularidade foi sua simplicidade e a natureza dinâmica e interpretada de sua implementação.
Você precisará dos seguintes itens instalados em seu computador para acompanhar este tutorial:
- MacOS Catalina ou posterior: você pode executar o PHP em versões anteriores, mas continuaremos no MacOS neste tutorial.
- Homebrew Package Manager: o gerenciador de pacotes ausente para macOS.
- PECL: o repositório para extensões PHP .
Primeiro, vamos instalar as ferramentas de linha de comando, pois elas serão usadas pelo Homebrew:
1 xcode-select --install
Em seguida, usaremos um gerenciador de pacotes para instalar as coisas. Isso garante que nossas dependências serão atendidas. Prefiro
Homebrew
, ou brew
para abreviar. Para começar a usar brew
, abra seu terminal app
e digite:1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
Isso aproveita
curl
para extrair os scripts e binários de instalação mais recentes para brew
.As instruções de instalação são bem simples. Digite sua senha quando necessário para assumir privilégios de root para a instalação. Quando estiver concluído, basta digitar o seguinte para verificar se o
brew
está instalado corretamente:1 brew --version
Se você tiver problemas neste ponto e não conseguir executar
brew
, consulte os documentos de instalação do Homebrew.Você também pode verificar a instalação do homebrew usando
brew doctor
. Confirme se todos os problemas ou mensagens de erro foram resolvidos antes de prosseguir. Você pode encontrar avisos, que geralmente podem ser ignorados com segurança.Para usar o MongoDB com PHP, devemos instalar o Apache.
A versão mais recente do macOS 11.0 Big Sur vem com o Apache 2.4 pré-instalado, mas a Apple removeu alguns scripts essenciais, o que dificulta seu uso.
Então, para ter certeza de que estamos alinhados, vamos instalar o Apache 2.4 via Homebrew e, em seguida, executá-lo nas portas padrão (80/443).
Quando eu estava escrevendo este tutorial, perdi muito tempo tentando descobrir o que estava acontecendo com a versão pré-instalada. Então, acho melhor instalarmos do zero usando o Homebrew.
1 sudo apachectl stop # stop the existing apache just to be safe 2 sudo launchtl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist # Remove the configuration to run httpd daemons
Agora, vamos instalar a versão mais recente do Apache:
1 brew install httpd
Uma vez instalado, vamos iniciar o serviço.
1 brew services start httpd
Agora você deve conseguir abrir um navegador da Web, visitar
http://localhost:8080
e ver algo semelhante ao seguinte:O servidor web Apache padrão não oferece suporte para PHP integrado. Portanto, precisamos instalar o PHP e a extensão PHP para reconhecer e interpretar arquivos PHP.
Se você instalou versões anteriores do PHP, recomendo enfaticamente que faça uma limpeza removendo as versões mais antigas. Se você tiver projetos anteriores que dependam dessas versões, precisará ter cuidado e fazer backup de suas configurações e arquivos de projeto.
O Homebrew é uma boa maneira de os usuários do MacOS instalarem o PHP.
1 brew install php
Quando isso for concluído, você poderá testar se ele foi instalado corretamente emitindo o seguinte comando em seu prompt de linha de comando no terminal.
1 php --version
Você deverá ver algo semelhante a isto:
1 $ php --version 2 PHP 8.0.0 (cli) (built: Nov 30 2020 13:47:29) ( NTS ) 3 Copyright (c) The PHP Group 4 Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies 5 with Zend OPcache v8.0.0, Copyright (c), by Zend Technologies
Agora que temos o
php
instalado, podemos configurar o Apache para usar o PHP
para interpretar nosso conteúdo da web, traduzindo nossos comandos php
em vez de exibir o código-fonte.PECL (PHP Extension Community Library) é um repositório para extensões PHP, fornecendo um diretório de todas as extensões conhecidas e recursos de hospedagem ou download e desenvolvimento de extensões PHP.
pecl
é a ferramenta binária ou de linha de comando (instalada por padrão com PHP) que você pode usar para instalar e gerenciar extensões PHP. Faremos isso na próxima seção.Instale a extensão PHP MongoDB antes de instalar a biblioteca PHP para MongoDB. É importante observar que a experiência completa do driver MongoDB é fornecida com a instalação da extensão de baixo nível (que se integra ao nosso driver C) e da biblioteca de alto nível, escrita em PHP.
Você pode instalar a extensão usando o PECL na linha de comando:
1 pecl install mongodb
Em seguida, precisamos modificar o arquivo
php.ini
principal para incluir a extensão MongoDB. Para localizar seu arquivo php.ini
, use o seguinte comando:1 $ php --ini 2 Configuration File (php.ini) Path: /usr/local/etc/php/8.3
Para instalar a extensão, copie a linha a seguir e coloque-a no final do arquivo
php.ini
.1 extension=mongodb.so
Depois de salvar o php.ini, reinicie o serviço Apache e, para verificar a instalação, use o seguinte comando.
1 brew services restart httpd 2 3 php -i | grep mongo
Você deverá ver uma saída semelhante a esta:
1 $ php -i | grep mongo 2 mongodb 3 libmongoc bundled version => 1.25.2 4 libmongoc SSL => enabled 5 libmongoc SSL library => OpenSSL 6 libmongoc crypto => enabled 7 libmongoc crypto library => libcrypto 8 libmongoc crypto system profile => disabled 9 libmongoc SASL => enabled 10 libmongoc SRV => enabled 11 libmongoc compression => enabled 12 libmongoc compression snappy => enabled 13 libmongoc compression zlib => enabled 14 libmongoc compression zstd => enabled 15 libmongocrypt bundled version => 1.8.2 16 libmongocrypt crypto => enabled 17 libmongocrypt crypto library => libcrypto 18 mongodb.debug => no value => no value
Agora você está pronto para começar a usar o PHP para manipular e gerenciar dados em seus bancos de dados MongoDB. Em seguida, vamos nos concentrar em preparar seu cluster do MongoDB.
Se você estiver enfrentando problemas com a instalação da extensão do MongoDB, algumas dicas ajudam a verificar se tudo está instalado corretamente.
Primeiro, você pode verificar se o Apache e o PHP foram instalados com êxito criando um arquivo info.php na raiz do diretório da Web. Para localizar o diretório web raiz, use o seguinte comando:
1 $ brew info httpd 2 ==> httpd: stable 2.4.58 (bottled) 3 Apache HTTP server 4 https://httpd.apache.org/ 5 /usr/local/Cellar/httpd/2.4.58 (1,663 files, 31.8MB) * 6 Poured from bottle using the formulae.brew.sh API on 2023-11-09 at 18:19:19 7 From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/h/httpd.rb 8 License: Apache-2.0 9 ==> Dependencies 10 Required: apr ✔, apr-util ✔, brotli ✔, libnghttp2 ✔, openssl@3 ✔, pcre2 ✔ 11 ==> Caveats 12 DocumentRoot is /usr/local/var/www
No arquivo, adicione o seguinte conteúdo:
1 <?php 2 echo("Hello World"); 3 ?>
Em seguida, vamos falar sobre como executar um programa PHP no localhost. Navegue até http://localhost:8080/info.php e você deverá ver uma página em branco apenas com o texto Olá, mundo.
Em seguida, edite o conteúdo do arquivo info.php para:
1 <?php 2 phpinfo(); 3 ?>
Salve e, em seguida, atualize a página info.php. Você deverá ver uma página com uma grande tabela de informações PHP como esta:
IMPORTANTE: Em servidores de produção, não é seguro expor as informações exibidas por phpinfo() em uma página acessível publicamente
As informações em que estamos interessados podem estar nestes locais:
- A propriedade "Configuration File (php.ini) Path" mostra de onde o tempo de execução do PHP está obtendo o arquivo php.ini. Pode acontecer que a extensão mongodb.so tenha sido adicionada no arquivo php.ini errado, pois pode haver mais de um.
- “Additional .ini files parsed mostra possíveis arquivos de configuração PHP extras que podem impactar sua configuração específica. Esses arquivos estão no diretório listado pela seção "Scan this dir for additional .ini files" na tabela.
Há também uma tabela “mongodb” inteira que se parece com isto:
Sua presença indica que a extensão MongoDB foi carregada corretamente e está funcionando. Você também pode ver o número da versão para garantir que é a que pretende usar.
Se você não vir esta seção, é provável que a extensão MongoDB não tenha sido carregada. Se esse for o caso, procure a propriedade "error_log" na tabela para ver onde está o arquivo de log de erros do PHP, pois ele pode conter pistas cruciais. Certifique-se de que "log_errors" esteja definido como LIGADO. Ambos estão localizados na seção "Core" do PHP.
Se você estiver atualizando para uma versão mais recente do PHP ou tiver várias versões instaladas, lembre-se de que cada versão precisa ter sua própria extensão MongoDB e arquivos php.ini.
Agora que você configurou seu ambiente local, é hora de criar um MongoDB database para trabalhar e carregar alguns dados de exemplo que você possa explorar e modificar.
Comece hoje mesmo com um cluster M0 no Atlas. É gratuito para sempre e é a maneira mais fácil de experimentar as etapas desta série de blogs.
O provisionamento do cluster levará alguns minutos; portanto, enquanto espera, você pode passar para a próxima etapa.
Esperemos que seu MongoDB cluster tenha terminado de ser iniciado agora e provavelmente esteja em execução há alguns minutos.
As instruções a seguir estavam corretas no momento da redação, mas podem mudar, pois estamos sempre melhorando o Atlas user:
Na interface web do Atlas, você verá um botão verde "Get Started" no canto inferior esquerdo da tela. Clique nele para ver uma lista de verificação de etapas para configurar seu banco de dados. Clique em cada um dos itens da lista (incluindo o item "Carregar dados de amostra " — usaremos isso posteriormente para testar a biblioteca PHP) para ajudar nas etapas de configuração.
A maneira mais rápida de obter acesso aos dados é carregar os conjuntos de dados de exemplo em seu cluster diretamente no console do Atlas. Se você for novo, o assistente de novo usuário o orientará durante o processo e solicitará que você os carregue.
Se você já criou o cluster e deseja voltar para carregar os conjuntos de dados de amostra, clique nas reticências (três pontos) ao lado dos botões de conexão do cluster (veja a imagem abaixo) e selecione
Load Sample Dataset
.Agora, vamos definir a configuração necessária para acessar seus dados no Cluster MongoDB. Você precisará criar um usuário de banco de dados e configurar sua lista de acesso de endereços IP.
Seguindo as etapas de "Começar", crie um usuário com "Acesso de leitura e gravação a qualquer banco de dados". Você pode dar-lhe o nome de usuário e senha de sua escolha. Faça uma cópia deles, porque você vai precisar deles em breve. Use o botão "gerar automaticamente senha segura" para garantir que você tenha uma senha longa e aleatória que também seja segura para colar em sua string mais tarde.
Ao implantar um aplicativo com dados confidenciais, você deve apenas colocar na lista de permissões o endereço IP dos servidores que precisam se conectar ao seu banco de dados. Para colocar na lista de permissões o endereço IP de sua máquina de desenvolvimento, selecione "Acesso à rede", clique no botão "Adicionar endereço IP" e, em seguida, clique em "Adicionar endereço IP atual" e pressione "Confirmar."
A última etapa da lista de verificação "Começar" é "Conecte-se ao seu cluster". Selecione "Conectar seu aplicativo" e selecione "PHP" com uma versão de "PHPLIB 1.8".
Clique no botão "Copiar" para copiar o URL em seu buffer de colagem. Salve-o no mesmo local em que armazenou seu nome de usuário e senha. Observe que o URL tem
<password>
como espaço reservado para sua senha. Você deve colar sua senha aqui, substituindo todo o espaço reservado, inclusive os caracteres <
e >
.Agora é hora de realmente escrever algum código PHP para se conectar ao seu MongoDB database! Até agora, instalamos apenas os componentes de suporte do sistema. Antes de começarmos a nos conectar ao nosso banco de dados e usar o PHP para manipular dados, precisamos instalar a biblioteca PHP do MongoDB.
Composer é a ferramenta de instalação recomendada para a biblioteca MongoDB. O Composer é uma ferramenta para gerenciamento de dependências em PHP. Ele permite que você declare as bibliotecas das quais seu projeto depende e ele as gerenciará (instalará/atualizará) para você.
Para instalar o
composer
, podemos usar o Homebrew.1 brew install composer
Depois que o
composer
estiver instalado, você poderá prosseguir com a instalação da biblioteca do MongoDB.A instalação da biblioteca deve ocorrer no diretório raiz do seu projeto. O Composer não é um gerenciador de pacotes no mesmo sentido que o Yum ou o Apt. O Composer instala pacotes em um diretório dentro do seu projeto. Por padrão, ele não instala nada globalmente.
1 $ composer require mongodb/mongodb 2 Using version ^1.8 for mongodb/mongodb 3 ./composer.json has been created 4 Running composer update mongodb/mongodb 5 Loading composer repositories with package information 6 Updating dependencies 7 Lock file operations: 4 installs, 0 updates, 0 removals 8 - Locking composer/package-versions-deprecated (1.11.99.1) 9 - Locking jean85/pretty-package-versions (1.6.0) 10 - Locking mongodb/mongodb (1.8.0) 11 - Locking symfony/polyfill-php80 (v1.22.0) 12 Writing lock file 13 Installing dependencies from lock file (including require-dev) 14 Package operations: 4 installs, 0 updates, 0 removals 15 - Installing composer/package-versions-deprecated (1.11.99.1): Extracting archive 16 - Installing symfony/polyfill-php80 (v1.22.0): Extracting archive 17 - Installing jean85/pretty-package-versions (1.6.0): Extracting archive 18 - Installing mongodb/mongodb (1.8.0): Extracting archive 19 Generating autoload files 20 composer/package-versions-deprecated: Generating version class... 21 composer/package-versions-deprecated: ...done generating version class 22 2 packages you are using are looking for funding.
Verifique se você está no mesmo diretório em que estava quando usou o
composer
acima para instalar a biblioteca.No editor de código, crie um arquivo PHP no diretório de projeto chamado quickstart.php. Se você estiver referenciando o exemplo, insira o seguinte código:
1 2 3 require_once __DIR__ . '/vendor/autoload.php'; 4 5 $client = new MongoDB\Client( 6 'mongodb+srv://<username><password>@myfirstcluster.zbcul.mongodb.net/dbname?retryWrites=true&w=majority'); 7 8 $customers = $client->selectCollection('sample_analytics', 'customers'); 9 $document = $customers->findOne(['username' => 'wesley20']); 10 11 var_dump($document); 12 13
<username>
e <password>
são o nome de usuário e a senha que você criou no Atlas, e o endereço do cluster é específico para o cluster que você iniciou no Atlas.Salve e feche o programa
quickstart.php
e execute-o a partir da linha de comando:1 $ php quickstart.php
Se tudo correr bem, você deverá ver algo semelhante ao seguinte:
1 $ php quickstart.php 2 object(MongoDB\Model\BSONDocument)#12 (1) { 3 ["storage":"ArrayObject":private]=> 4 array(8) { 5 ["_id"]=> 6 object(MongoDB\BSON\ObjectId)#16 (1) { 7 ["oid"]=> 8 string(24) "5ca4bbcea2dd94ee58162a72" 9 } 10 ["username"]=> 11 string(8) "wesley20" 12 ["name"]=> 13 string(13) "James Sanchez" 14 ["address"]=> 15 string(45) "8681 Karen Roads Apt. 096 Lowehaven, IA 19798" 16 ["birthdate"]=> 17 object(MongoDB\BSON\UTCDateTime)#15 (1) { 18 ["milliseconds"]=> 19 string(11) "95789846000" 20 } 21 ["email"]=> 22 string(24) "josephmacias@hotmail.com" 23 ["accounts"]=> 24 object(MongoDB\Model\BSONArray)#14 (1) { 25 ["storage":"ArrayObject":private]=> 26 array(1) { 27 [0]=> 28 int(987709) 29 } 30 } 31 ["tier_and_details"]=> 32 object(MongoDB\Model\BSONDocument)#13 (1) { 33 ["storage":"ArrayObject":private]=> 34 array(0) { 35 } 36 } 37 } 38 }
Você acabou de conectar seu programa PHP ao MongoDB e realizou uma query de um único documento do banco de dados
sample_analytics
em seu cluster! Se você não vir esses dados, talvez não tenha carregado com sucesso os dados de amostra em seu cluster. Volte algumas etapas até que a execução desse comando mostre o documento acima.Armazenar nomes de usuários e senhas em seu código nunca é uma boa ideia. Vamos dar mais um passo para protegê-los um pouco melhor. É uma prática geral colocar esses tipos de valores confidenciais em um arquivo de ambiente como
.env
. O truque, então, será fazer com que seu código PHP leia esses valores. Felizmente, Vance Lucas encontrou uma ótima solução chamada phpdotenv
. Para começar a usar a solução da Vance, vamos usar composer
.1 $ composer require vlucas/phpdotenv
Agora que temos a biblioteca instalada, vamos criar nosso arquivo
.env
que contém nossos valores confidenciais. Abra seu editor favorito e crie um arquivo chamado .env
, colocando os seguintes valores nele. Substitua your user name
e your password
pelos valores reais criados ao adicionar um usuário de banco de dados no Atlas.1 MDB_USER="your user name" 2 MDB_PASS="your password"
Em seguida, precisamos modificar nosso programa quickstart.php para extrair os valores usando
phpdotenv
. Vamos adicionar uma chamada à biblioteca e modificar nosso programa de início rápido para que fique como o seguinte. Observe as alterações nas linhas 5, 6 e 9.1 2 3 require_once __DIR__ . '/vendor/autoload.php'; 4 $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); 5 $dotenv->load(); 6 7 $client = new MongoDB\Client( 8 'mongodb+srv://'.$_ENV['MDB_USER'].':'.$_ENV['MDB_PASS'].'@tasktracker.zbcul.mongodb.net/sample_analytics?retryWrites=true&w=majority' 9 ); 10 11 $customers = $client->selectCollection('sample_analytics', 'customers'); 12 $document = $customers->findOne(['username' => 'wesley20']); 13 14 var_dump($document);
Em seguida, para garantir que você não esteja publicando suas credenciais em
git
ou em qualquer repositório de código-fonte que esteja usando, certifique-se de adicionar um .gitignore (ou equivalente) para evitar o armazenamento desse arquivo em seu repositório. Aqui está meu arquivo .gitignore
:1 composer.phar 2 /vendor/ 3 .env
Meu
.gitignore
inclui arquivos que são aproveitados como parte de nossas bibliotecas - eles não devem ser armazenados em nosso projeto.Se quiser aproveitar os arquivos do meu projeto, fique à vontade para visitar meu repositório no github, clonar, bifurcar e compartilhar seus comentários na Comunidade.
Este início rápido teve o objetivo de preparar você para usar o PHP com o MongoDB. Agora você deve estar pronto para passar para o próximo artigo desta série. Sinta-se à vontade para me contatar na Comunidade se tiver alguma dúvida sobre este artigo ou qualquer coisa relacionada ao MongoDB.
- A documentação do driver MongoDB PHP fornece documentação completa que descreve como usar PHP com seu cluster do MongoDB.
- A documentação do documento de query do MongoDB detalha todo o poder disponível para consultar as coleções do MongoDB.