Почему этот маленький трюк получает ожидаемый результат в оболочке, но не в браузере? Здесь у вас есть детали. Я хочу читать данные из Graph-DB на CosmosDB в рамках моей подписки Azure из докера Ubuntu через PHP с библиотекой Brightzone в любом обычном веб-браузере. Essencially Не работает : GraphDB-> CosmosDB-> Azure-> Docker-> Ubuntu-> PHP-> Brightzone -> Браузер Отлично работает : GraphDB-> CosmosDB-> Azure-> Docker-> Ubuntu-> PHP-> Brightzone -> Shell
Моя настройка Ubuntu Docker:
docker image pull ubuntu
docker run -it -p 80:80 -v /<localpath>/httpVolume:/var/www/html ubuntu /bin/bash
apt install apache2
apt install php libapache2-mod-php
apt install git
apt install php7.2-mbstring
apt install curl
/etc/init.d/apache2 restart
cd /var/www/html/
echo "{" > composer.json
echo -e ' "require": {' >> composer.json
echo -e ' "brightzone/gremlin-php": "3.*"' >> composer.json
echo -e " }" >> composer.json
echo -e "}" >> composer.json
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
composer install
php composer.phar require brightzone/gremlin-php "3.*"
Мой PHP-файл очень сильно взят из примера Microsoft. git clone https://github.com/Azure-Samples/azure-cosmos-db-graph-php-getting-started
Файл PHP:
<html>
<header>
<title>test</title>
</header>
<body>
<?php
require_once('vendor/autoload.php');
use \Brightzone\GremlinDriver\Connection;
$db = new Connection([
'host' => '<Resourcename>.gremlin.cosmos.azure.com',
'username' => '/dbs/<graphdatabasename>/colls/<MySillyTestCollection>',
'password' => '<prettyLongAzureKey>'
,'port' => '443'
// Required parameter
,'ssl' => TRUE
]);
try {
$db->timeout = 0.5;
$db->open();
if($db){
$query = "g.V().count()";
printf("\t%s\n\tQuery: %s\n", "Counting all the vertices.\n", $query);
$result = $db->send($query);
if($result) {
printf("\tNumber of vertices in this graph: %s\n\n", $result[0]);
}
} else {
echo "Can't open DB";
}
$db->close();
} catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
?>
</body>
</html>
Здесь самое интересное. Работает при выполнении из оболочки. php index.php
И это даст мне: Number of vertices in this graph: 4
Любой браузер, внутри контейнера Docker или с хоста, не покажет мне ожидаемую и очень желаемую 4, а скорее выведет вызванную функцию g.V().count()
Должен ли я создать себе грязную работу и вызвать exec ()? Я хотел бы избежать этого.