问题描述
我一直在尝试将我的应用程序(在应用引擎中运行)创建为 pdf 的一些发票上传到 GCS 中的存储桶。稍后,该应用程序将通过电子邮件向每位客户发送相同的信息。 从我的本地 PC 在 PHP 中运行应用程序时,它运行良好,连接到 App Engine 实例。但是每当我部署完整代码时,它根本不起作用。 我在应用程序的文件夹结构中的文件夹中有服务帐户的凭据文件(这是由默认为我的项目创建的原始文件)。无论我是在本地工作还是在 GAE 中工作,只要我尝试访问 GCS 中的存储桶,我都会指出它。正如我所说的,本地一切都很顺利,但没有来自云。这是一些代码。
//FILE TO UPLOAD TO GCS
date_default_timezone_set('Europe/Madrid');
require __DIR__ . '/../vendor/autoload.PHP';
require_once __DIR__ . '/../cn.PHP';
require_once __DIR__ . '/../librerias/fpdf/fpdf.PHP';
if(!isset($_SESSION)){
session_start();
}
use Google\Cloud\Storage\StorageClient;
putenv('GOOGLE_APPLICATION_CREDENTIALS=../librerias/credentials/credentials.json');
function upload_object($bucketName,$objectName,$source){
$storage = new StorageClient();
$file = $source;
$bucket = $storage->bucket($bucketName);
$object = $bucket->upload($file,[
'name' => $objectName
]);
printf('Uploaded %s to gs://%s/%s' . PHP_EOL,basename($source),$bucketName,$objectName);
}
//############### CODE GENErating PDF FILE #######################3
//blablablablablablabla
// ################ END OF PDF FILE GENERATION USING FPDF##################
$pdfData=$pdf->Output('S','',1);
$filename="Facturas/".$ano."/".$factura_1."-".$ano.".pdf";
$bucketName="my-bucket.appspot.com";
upload_object($bucketName,$filename,$pdfData);//THIS IS NOT WORKING WHEM RUNNING FROM GAE,BUT WORKING WELL FROM LOCAL CONNECTING TO MY INSTANCE THROUGH PROXY
//############### CODE SENDING PDF FILE USING SENGRID #######################3
//blablablablablablabla
// ################ END OF PDF FILE SENDING ##################
//END OF FILE UPLOAD TO GCS
//app.yaml
runtime: PHP72
runtime_config:
document_root: .
handlers:
# Serve a directory as a static resource.
- url: /Css
static_dir: Css
# Serve a directory as a static resource.
- url: /font
static_dir: font
# Serve a directory as a static resource.
- url: /librerias
static_dir: librerias
- url: /librerias/credentials
static_dir: librerias/credentials
# Serve images as static resources.
- url: /icons/(.+\.(gif|png|jpg|jpeg|ico))$
static_files: icons/\1
upload: icons/.+\.(gif|png|jpg|jpeg|ico)$
- url: /img/(.+\.(gif|png|jpg|jpeg))$
static_files: img/\1
upload: img/.+\.(gif|png|jpg|jpeg)$
- url: /img/logos/(.+\.(gif|png|jpg|jpeg))$
static_files: img/logos/\1
upload: img/logos/.+\.(gif|png|jpg|jpeg)$
- url: .*
script: auto
secure: always
entrypoint:
serve handler.PHP
解决方法
解决了,我终于让它工作了。问题似乎是如何授权我的服务帐户。而不是
putenv('GOOGLE_APPLICATION_CREDENTIALS=../librerias/credentials/credentials.json');
它正在与
$storage = new StorageClient([
'keyFile' => json_decode(file_get_contents('mycredentials.json'),true)
]);