php亚马逊弹性转码器

Posted

技术标签:

【中文标题】php亚马逊弹性转码器【英文标题】:php amazon elastic transcoder 【发布时间】:2014-06-06 17:05:00 【问题描述】:

我正在尝试执行一项将对视频文件进行转码的工作...我有一个 php 文件:

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

use Aws\ElasticTranscoder\ElasticTranscoderClient;

// Create a service locator using a configuration file
$client = ElasticTranscoderClient::factory(array(
        'key'    => 'my key',
        'secret' => 'my secret',
        'region' => 'us-west-2',
));

$result = $client->createJob(array(
        'PipelineId' => 'my pipeline id',
        'Input' => array(
                'Key' => 'video.mp4',
                'FrameRate' => 'auto',
                'Resolution' => 'auto',
                'AspectRatio' => 'auto', 
                'Interlaced' => 'auto',
                'Container' => 'auto',
        ),
        'Output' => array(
                'Key' => 'output.mp4',
                'ThumbnailPattern' => 'thumbcount.jpg',
                'Rotate' => 'auto',
                'PresetId' => '1351620000001-000010',
        ),
));

?>

我把这个脚本称为 transcoder.php

问题是,如果我像 php transcoder.php 这样从 VPS 的根目录调用它,它工作得很好,但如果我尝试从我的浏览器(safari、chrome、firefox)调用它我得到一个

Fatal error: Uncaught exception 'Aws\ElasticTranscoder\Exception\ElasticTranscoderException' in /home/my_user/public_html/test/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php:91 

Stack trace: 

#0 /home/my_user/public_html/test/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/NamespaceExceptionFactory.php(76): Aws\Common\Exception\NamespaceExceptionFactory->createException('Aws\ElasticTran...', Object(Guzzle\Http\Message\EntityEnclosingRequest), Object(Guzzle\Http\Message\Response), Array) 

#1 /home/my_user/public_html/test/vendor/aws/aws-sdk-php/src/Aws/Common/Exception/ExceptionListener.php(55): Aws\Common\Exception\NamespaceExceptionFactory->fromResponse(Object(Guzzle\Http\Message\EntityEnclosingRequest), Object(Guzzle\Http\Message\Response)) 

#2 [internal function]: Aws\Common\Exception\ExceptionListener->onRequestError(Object(Guzzle\Common\Event), 'request.error', Object(Symfony\Component\EventDispatcher\EventDispatcher)) 

#3 /home/my_user/public_html/test/vendor/symfony/event-dispatcher/Symfony/Component/Even in /home/my_user/public_html/test/transcoder.php on line 35

知道为什么它可以从 root 运行以及为什么它不能从浏览器运行吗?我需要从浏览器访问它。

【问题讨论】:

【参考方案1】:

尝试从 php.ini 更改有关 curl 和 exec 的设置,这就是为什么您没有权限从浏览器访问脚本,但可以从根控制台工作。

【讨论】:

【参考方案2】:

首先,在代码周围加上try/catch statement 以查看有助于诊断问题的整个错误消息。

我怀疑这是因为您在Key 中传递的文件不存在,因为如果您在命令行与 apache 上执行,工作目录可能会有所不同。

尝试指定video.mp4 的完整路径,看看是否可行。

【讨论】:

Key 中的文件是来自亚马逊 S3 存储桶的文件...不是本地文件 啊,我的错,不管怎样,使用 try/catch 来获取完整的错误信息 我编辑了我的帖子,请再检查一遍,添加完整的消息 那没有显示抛出异常的错误消息...***.com/questions/9041173/… 消息是空的,只有堆栈可以显示一些信息......似乎在 php.ini 中更改一些设置就可以了

以上是关于php亚马逊弹性转码器的主要内容,如果未能解决你的问题,请参考以下文章

用于查询亚马逊产品的好 PHP 库? [关闭]

为啥一个亚马逊 ec2 实例需要两个弹性 IP?

亚马逊如何拥有弹性 IP 的专有权

亚马逊EC2弹性IP收费

删除亚马逊弹性搜索中的旧索引

命令行中的亚马逊弹性豆茎问题[重复]