在我的共享主机中调整图像大小,节省带宽和文件数

时间:2011-11-14 14:04:20

标签: php shared-hosting image-resizing

我正在使用共享网络托管,它只为我选择的软件包提供有限的选项。我的帐户中只能有10,000个文件和5 GB的带宽。此政策已经实施,他们正在强制我清理文件,否则他们将阻止我的帐户或我需要升级我的帐户。当我注册时,他们为我提供了无限的文件数和无限的带宽。我已经使用它超过一年了。我不想升级我的帐户,也不想在此时转移到其他托管。

我的网站上有大约75000个图像文件,每月大约使用25 gb带宽。在这75000个图像文件中,3750个是独特的图像。其余的是不同大小的相同图像。我的意思是我有一个19种不同大小的图像文件。每个文件都有一个唯一的名称。例如,

其中一张独特的图片的文件名为ab171.png
尺寸为800x600的相同图片的文件名为ab171_800_600.jpg
尺寸为640x480的相同图片的文件名为ab171_640_480.jpg
同样我有其他文件

因此,每个图像文件集都有1个主文件和19个不同图像大小的其他文件。

我网站上的图片用于大约20多个网站。大约10个被授权使用,其余的则没有。我想阻止不在我列表中的网站或警告他们不要使用我的带宽。如果我能完成以下想法,我不介意他们使用我的图像。

现在,为了解决我的文件数和带宽问题,我知道我可以将主文件托管到图像托管站点,并使用timthumb脚本动态调整大小。 (我有一个付费的图片托管帐户,我可以使用它。)

这是我到目前为止所做的:

一个。我已经提取了确切的图像文件名(例如文件名:ab171_800_600)

湾将旧文件名重定向到我的脚本,图像文件名作为参数(在上面的步骤中提取)例如:
旧网址:myurl.com/images/thummbs/a/ab171_800_600.jpg
重定向为:myurl.com/thumbs.php?id = ab171_800_600

℃。我写了一个php脚本thumbs.php,它读取查询字符串id并提取图像id,图像宽度和图像高度。然后它检查数据库中的图像ID以获取图像URL(它托管在图像托管站点中)。

d。然后脚本重定向到timthumb.php,图像url(托管在图像托管站点中),高度和宽度作为参数。

到目前为止,上面的脚本运行正常。如果我从浏览器导航到我的旧网址myurl.com/images/thummbs/a/ab171_800_600.jpg,它可以完美地从图片托管中获取图片并调整其大小并在浏览器中显示。

我的问题是图像没有显示在我/其他网站中,旧图片网址链接在图片标记内。例如:< img src =“http://myurl.com/images/thummbs/a/ab171_800_600.jpg”/>

请帮助解决此问题。欢迎您的建议。

由于

3 个答案:

答案 0 :(得分:2)

唯一的解决方案是尽快退出诈骗主机。

他们添加了 CPU使用限制以及如此荒谬的文件编号限制,这没有任何疑问。

你将从所有斗争中获得的唯一结果是另一次极限破坏 唯一的解决方案是找到另一个托管,一个理智的托管。

希望这有帮助。

答案 1 :(得分:0)

您需要避免重定向。

当您为页面发送重定向时,浏览器会将整个页面重定向到HTTP标头中的位置。

如果您为图像发送重定向,则无法执行此操作。

您需要设计一个不依赖于HTTP重定向的解决方案。我的建议通常是:

  1. 要求您的用户更新他们的链接(不太实用)
  2. 不是重定向,而是在PHP页面内加载远程页面,因此不需要重定向。您需要在响应中设置正确的内容类型
  3. 第二个选项可能会让您回到带宽问题区域,但是您可以通过为响应提供非常长的缓存时间来帮助它。

    此外,如果您没有获得所需的服务,请不要害怕找到其他托管公司。

    更新 - PHP显示远程图像

    如果您拥有托管图片的人员的许可,则只能使用此功能。您还应该知道,因为图像显示在PHP页面中,所以它将使用您的带宽。

    header("Content-type: image/jpeg\n\n"); 
    $ch = curl_init ("http://....image.jpg"); // The URL you have already calculated in your question
    curl_setopt($ch, CurlOPT_HEADER, 0);
    curl_setopt($ch, CurlOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CurlOPT_BINARYTRANSFER,1);
    $rawdata=curl_exec ($ch);
    curl_close ($ch);
    echo $rawdata;
    

答案 2 :(得分:0)

我建议使用file_get_contents()http://php.net/manual/en/function.file-get-contents.php或curl http://ca3.php.net/manual/en/ref.curl.php来获取图片,具体取决于您的虚拟主机允许的内容。