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


Resizing images, save bandwidth and file count in my shared hosting

我使用共享的虚拟主机,它只为我选择的包提供有限的选项。我的账户里只能有1万个文件和5gb的带宽。这项政策已经实施了,他们正在强迫我清理文件,否则他们将封锁我的帐户,或者我需要升级我的帐户。当我注册时,他们为我提供了无限的文件数和无限的带宽。我已经用了一年多了。我不想升级我的帐户,也不想在此时转移到其他主机。

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

唯一的图像之一的文件名为ab171.png
大小为800x600的同一图像的文件名为ab171_800_600.jpg
尺寸为640x480的相同图像的文件名为ab171_640_480.jpg
同样我还有其他文件

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

图片从我的网站被使用在大约20+网站。大约有10种被授权使用,其余的没有。我想阻止那些不在我的名单上的网站或警告他们不要使用我的带宽。如果我能完成下面的想法,我不介意他们使用我的图像。

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

到目前为止我所做的是:

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

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

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

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

到目前为止,上面的脚本运行良好。如果我从浏览器导航到我的旧url myurl.com/images/thummbs/a/ab171_800_600.jpg,它会完美地从图像托管中获取图像并调整大小并显示在浏览器中。

我的问题是图像没有出现在我/其他网站的旧图像url链接在图像标签内。示例:

请帮忙解决这个问题。欢迎多提建议。

谢谢

唯一的解决办法就是尽快退出那个骗人的主机。

毫无疑问,他们已经添加了CPU使用限制以及这样一个荒谬的文件数量限制。

你所有努力的唯一结果是又一次突破极限。
唯一的解决办法是另找一个主机,一个正常的主机。

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

你需要避免重定向。

当你为一个页面发送重定向时,浏览器会将整个页面重定向到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;