#php #composer-php
#php #composer-php
Вопрос:
Я действительно борюсь здесь. Я просто пытаюсь вывести содержимое коллекции MongoDB через страницу php; вот и все. Однако я не могу успешно подключиться к своему MongoDB после прочтения нескольких руководств.
Я узнал, что подключение к вашему MongoDB через Composer является жизнеспособным вариантом.
Итак, я последовал этому руководству, чтобы установить Composer:
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-composer-on-ubuntu-16-04
1.
cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
2.
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
3.
composer require mongodb/mongodb
Согласно этому руководству, теперь мне нужно ввести require 'vendor/autoload.php';
в свой php-файл. «Нет такого файла или каталога». Хорошо, поэтому я запускаю sudo find / -name autoload.php
и нахожу autoload.php
/root/vendor/autload.php
. Итак, я получаю следующий php-файл:
<?php
require '/root/vendor/autoload.php'; // Composer autoloader
use MongoDBDriverManager as Mongo;
$mongo = new Mongo("mongodb://127.0.0.1:27017");
$collection = $mongo->blogDB->posts;
$result = $collection->find()->toArray();
print_r($result);
?>
Но при выполнении php-файла я получаю следующие ошибки:
Warning: require(/root/vendor/autoload.php): failed to open stream: Permission denied in /var/www/html/mySite/read.php on line 2
Fatal error: require(): Failed opening required '/root/vendor/autoload.php' (include_path='.:/usr/share/php') in /var/www/html/mySite/read.php on line 2
Я sudo chmod o w /root/vendor/
пытался безрезультатно. Могу ли я просто безопасно переместить autoload.php
в новое место, не повреждая конфигурации Composer? Куда я могу его переместить?
Я думал об удалении / переустановке Composer с нуля (на этот раз в учетной записи администратора, а не в учетной записи root, как в прошлый раз), но sudo apt-get purge --auto-remove composer
сбой с ошибкой Package 'composer' is not installed, so not removed
, которая, я полагаю, имеет смысл, поскольку я ее не устанавливал apt
.
Комментарии:
1. попробуйте require_once DIR .’/vendor/autoload.php ‘;
2. Где вы запускали
composer require mongodb/mongodb
, в каком каталоге? Если вы запустите это в корне вашего проекта (именно там вам нужно его запустить …), вы получитеvendor/
каталог в вашем проекте.3. хорошо, у меня есть
require_once DIR .'/vendor/autoload.php'
. Ошибки:Use of undefined constant DIR - assumed 'DIR' ... on line 2
.require_once(DIR/vendor/autload.php): failed to open stream: No such file or directory
4. Это
__DIR__
, php.net/manual/en/language.constants.predefined.php5. @jeroen — Ах, упс. Спасибо. Я не запускался
composer require mongodb/mongodb
в каталоге проекта… Теперь я возвращаюсь к ошибке, которую я получил до того, как начал это безумие композитора, которое естьUndefined property: MongoDBDriverManager::$blogDB in /var/www/html/mySite/read.php on line 10
. Он не распознает мою базу данных?
Ответ №1:
Дайте разрешение на этот путь: «root/vendor/autoload.php «
Дайте разрешение 777
И использовали «require_once» вместо «require».
Это ошибка, потому что не дано разрешение на чтение файла в эту папку.
один раз дайте разрешение, затем повторите попытку. Надеюсь, код будет работать