документы php возвращают «отказано в разрешении» на `require’ /root/vendor/autload.php «

#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.php

5. @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».

Это ошибка, потому что не дано разрешение на чтение файла в эту папку.

один раз дайте разрешение, затем повторите попытку. Надеюсь, код будет работать