PHP-вызов Graphdb работает в оболочке, а не в браузере - PullRequest
1 голос
/ 06 октября 2019

Почему этот маленький трюк получает ожидаемый результат в оболочке, но не в браузере? Здесь у вас есть детали. Я хочу читать данные из 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 ()? Я хотел бы избежать этого.

1 Ответ

0 голосов
/ 07 октября 2019

Я решил это с помощью ob_flush ();промывать();и ob_end_flush ();в моем сценарии. Не знаю почему, и сейчас я слишком боюсь спрашивать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...