【发布时间】:2014-12-15 13:34:48
【问题描述】:
我的客户是一名企业家,没有 html 知识。他有一个使用 PHP 在 linux 共享主机环境(基本包)上创建的网站。在他的网站上,他想用照片展示他以前的工作。但他抱怨他发现很难以管理员身份登录并自己上传这些照片。
-现在他让我为他写一些简单的东西,以便将他 Dropbox 帐户中的照片上传到他的网站。我说好的:)
我创建了一个管理页面(在这里我的客户可以选择他想要下载到他的网站的 Dropbox 相册。) -我使用了 php 的 Dropbox api 来定位他的相册。 - 我制作了一个表格,在其中列出了那些带有提交按钮的专辑,这些按钮将执行 POST 请求(参数 = Dropbox 帐户上文件的路径)。
这是该请求的代码:
if (isset($_POST['AlbumAdd'])) {
$name = $_POST['AlbumAdd'];
//echo "submitted: $name <br>";
$entry = getClient()->getMetadataWithChildren($name); //dropbox-sdk
if ($entry['is_dir']) {
//for now create file on localhost -> replace with ftp to upload on shared hosting site
if (!file_exists(__DIR__ . "/../examples/folder" . $name)) { //if !excists create folder on localhost
mkdir(__DIR__ . "/../examples/folder" . $name, 0777, true);
//echo "created " . $name . "on localhost";
}
foreach ($entry['contents'] as $child) {
$cp = $child['path'];
$size = $child['size'];
$cn = basename($cp);
echo "basename (cn)= " . $cn . " [$size] <br>";
if (!$child['is_dir']) //files only
{
//download from dropbox to localhost
getClient()->getFile($cp, fopen(__DIR__ . '/../examples/folder' . $cp, 'w+b'));
}
}
}
}
这适用于小文件,但当专辑太大时抛出此异常:
Fatal error: Maximum execution time of 30 seconds exceeded in C:\wamp\www\dropbox-sdk-php-1.1.4\dropbox-sdk\Dropbox\CurlStreamRelay.php on line 26
TEST OUTPUT:
basename (cn)= 01.mp3 [8.1 MB]
basename (cn)= 02.mp3 [7.3 MB]
basename (cn)= 03.mp3 [6 MB]
现在最好的事情是什么? - 托管站点的帮助台说他们无法更改最长执行时间的设置。所以更改我的 php.ini 文件是没有意义的。
-单独上传每张照片?
-切换到专用服务器意味着我可以完全控制?我不知道我的客户是否愿意每月额外支付 125 欧元
【问题讨论】:
-
你试过在脚本中设置max execution time吗?
-
@JayBlanchard 听起来没有。
-Helpdesk of the hosting site says they can't change the setting of the maximum execution time. So there is no point in changing my php.ini file. -
@MonkeyZeus 在脚本中设置最大执行时间会覆盖 php.ini 文件,并且只会影响设置它的脚本。
-
您设法进行的任何更改以允许更多执行时间只会将问题推到地毯下。一张专辑迟早会变得足够大,超过新的执行时间限制,你不能一直把执行时间推高。您需要分析您的代码并找到优化它的方法,以便它可以在分配的时间内完成更多工作。
-
@JayBlanchard 很有可能这个功能
ini_set()已被最终用户 aapbee 完全禁用。
标签: php dropbox-api execution-time http-post