Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 部署在谷歌应用程序引擎上的laravel不';不要上传文件_Php_Google App Engine_Laravel - Fatal编程技术网

Php 部署在谷歌应用程序引擎上的laravel不';不要上传文件

Php 部署在谷歌应用程序引擎上的laravel不';不要上传文件,php,google-app-engine,laravel,Php,Google App Engine,Laravel,我正在尝试上传一个文件,我正在使用Laravel4并部署在google应用程序引擎上。本地文件上传可以工作,但当使用google app engine部署时就不行了。 这是我的密码: 视图: 并显示一个带有文件attr的数组。但当与google应用程序引擎一起部署时,此代码返回NULL。在阅读了针对php的google app engine文档后,我了解到问题在于,在google app engine中,您无法写入文件系统应用程序,在中,我发现没有laravel的php代码,并尝试与我的代码结合

我正在尝试上传一个文件,我正在使用Laravel4并部署在google应用程序引擎上。本地文件上传可以工作,但当使用google app engine部署时就不行了。 这是我的密码:

视图:

并显示一个带有文件attr的数组。但当与google应用程序引擎一起部署时,此代码返回NULL。在阅读了针对php的google app engine文档后,我了解到问题在于,在google app engine中,您无法写入文件系统应用程序,在中,我发现没有laravel的php代码,并尝试与我的代码结合,如下所示:

上传_test.blade.php

require_once 'google/appengine/api/cloud_storage/CloudStorageTools.php';

use google\appengine\api\cloud_storage\CloudStorageTools;

$options = [ 'gs_bucket_name' => 'images_upload'];
$upload_url = CloudStorageTools::createUploadUrl('upload.handler', $options);
?>
<div class="body">
    <form action="<?php echo $upload_url ?>" enctype="multipart/form-data" method="post">
        <input type="file" name="uploaded_files" size="40">
        <input type="submit" value="Send">
    </form>
</div>
路线

控制器

$file = Input::file('image');
        dd($file);
        $destinationPath = 'img_gallery/';
        $extension = $file->getClientOriginalExtension();
        $filename = 'img_' . $id . '.' . $extension;
        $file->move($destinationPath, $filename);

        $car = Car::find($id);
        $car->Pic = $filename;
        $car->save();
        return Redirect::to('/');
 public function upload_image($id) {
        $file = Input::file('image');
        dd($file);
}
public function upload_handler() {
        var_dump($_FILES);
    }
但这表明:

Symfony\Component\HttpKernel\Exception\ MethodNotAllowedHttpException


我知道这是一个错误,因为form post没有指向路由,而是指向变量。该图像存储在google app engine中,但问题是,为了将文件路径保存在DB中,该代码不会发布到控制器。我试过其他方法,但没有结果。我也遵循了第6节中的步骤。此外,我尝试了,但没有结果

我认为这是一个权限问题,如果它与本地dev服务器而不是远程服务器一起工作。要修复此问题,请尝试以下操作:

  • 转到您的项目、存储、云存储、存储浏览器
  • 检查您的bucket是否存在,以及它是否具有写入您的服务帐户名的权限(可在中找到)
  • 我建议您使用默认的GCS存储桶:

  • 转到“应用程序设置”
  • 若你们有一个按钮,上面写着:生成云集成项目,点击它
  • 如果有一个谷歌云存储桶列在那里,使用它作为替代您的“图片上传”桶。它应该类似于“appid.appspot.com”
  • 这一行:

    $upload_url = CloudStorageTools::createUploadUrl('upload.handler', $options);
    

    第一个参数应该是一个URL——尝试删除引号(假设
    upload.handler
    指向您希望它指向的位置),或者尝试用应用程序应该重定向到的实际URL替换该参数。

    此方案的更好替代方案是将文件作为请求可以处理的一组大小的卡盘上传


    示例项目-

    您似乎没有使用Laravel 4的MVC方式进行操作-上载处理程序应该通过路由()指向控制器(),并且在路由配置中,您可以指定给定路由允许使用哪些http方法。包括云存储库也应该在视图之外处理。@glendaviesnz我编辑了我的问题。看一看——抱歉——在我的第一句评论中忽略了在app engine上运行Laravel的含义,这会使事情稍微复杂化,因为您通常会通过控制器路由文件上传-希望其他人能为您提供解决方案-将Laravel存储指向云存储(如中所述)可能是一个选项。@glendaviesnz我尝试过,但仍然是一样的。它不会将文件上载属性从视图传递到控制器。我还有别的选择吗?我能用google app engine上传google drive中的文件吗?@Stuart Langley你能看看我的问题吗?我照你说的做了,但仍然显示一个空值,而不是本地显示的文件属性。还有其他建议吗?在哪里检查写入权限?选择bucket,bucket权限,然后检查列表中是否有具有写入权限的服务帐户名。我使用的是默认bucket,但仍然没有在文件app.yaml附近的php.ini中上载文件。您是否添加了google_app_engine.enable_functions=“libxml_disable_entity_loader”?我的一个朋友使用了上传和php,为了工作,他不得不把它放在那里
    public function upload_handler() {
            var_dump($_FILES);
        }
    
    $upload_url = CloudStorageTools::createUploadUrl('upload.handler', $options);