GAE php应用程序无法找到" gs"包装纸

时间:2017-11-05 10:00:11

标签: php google-app-engine google-cloud-storage

我正在编写一个简单的php应用程序来测试对云存储桶的读/写准备

通过控制台Web界面

访问时,存储桶已定义并完美运行

但是虽然我已经定义了composer.json,php.ini和app.yaml follwing文档,但在运行时我收到以下消息:

警告:file_put_contents():无法找到包装器" gs" - 你在配置PHP时忘了启用它吗?

代码是

<?php

require_once '../vendor/autoload.php';

$destination = "gs://contest17014.appspot.com/ripetiOra_82833hd93hd9dh.mp3";
file_put_contents($destination, $output); 

?>

其中$ output是本地生成的mp3文件(为清晰起见未包括)

我在文档中读到应该自动包含包装器,但这是写入标准的env文档,而灵活的env文档中没有提到它。 我应该自己定义这个包装吗?

3 个答案:

答案 0 :(得分:1)

我相信您已经切换了file_put_content个参数,它们应该是:

<?php

require_once '../vendor/autoload.php';

$destination = "gs://contest17014.appspot.com/ripetiOra_82833hd93hd9dh.mp3";
file_put_contents($destination, $output); 
?>

答案 1 :(得分:0)

仅在gs://环境中支持

standard。对于flex或其他环境,您必须使用 StorageClient

通过composer包含google/cloud-datastore库。

示例:

$ composer require google/cloud-storage

<?php
require 'vendor/autoload.php';

use Google\Cloud\Storage\StorageClient;

$storage = new StorageClient([
    'projectId' => 'my_project'
]);

$bucket = $storage->bucket('my_bucket');

// Upload a file to the bucket.
$bucket->upload(
    fopen('/data/file.txt', 'r')
);

// Using Predefined ACLs to manage object permissions, you may
// upload a file and give read access to anyone with the URL.
$bucket->upload(
    fopen('/data/file.txt', 'r'),
    [
        'predefinedAcl' => 'publicRead'
    ]
);

// Download and store an object from the bucket locally.
$object = $bucket->object('file_backup.txt');
$object->downloadToFile('/data/file_backup.txt');

答案 2 :(得分:0)

对于php72standard env

use Google\Cloud\Storage\StorageClient; 
function register_stream_wrapper($projectId) {   
    $client = new StorageClient(['projectId' => $projectId]);
    $client->registerStreamWrapper();
}
register_stream_wrapper("projectId");

感谢James Crowley