2015-05-19 48 views
-2

如果我使用PHP文件作为源图像,其中:IMG PHP的src异步

$file = $_GET["file"]; 
$file_get = get_file_contents("from/".$file); 
$fopen = fopen("to/".$file,"w+"); 
fwrite($fopen, $file_get); 
fclose($fopen); 
header("Location:to/".$file); 

而且如果我在一个页面上使用的那种很多图片,如:

<img src="image.php/?file=img.jpg> 
<img src="image.php/?file=img2.jpg> 
<img src="image.php/?file=img3.jpg> 
... 

我发现image.php中的代码不会异步运行。图像被逐一下载。我怎样才能避免它?

+0

会话只能由一个请求中同时被打开,所有其他请求将坐下来等待。尽快关闭会话以允许其他请求并行处理。 – Sammitch

+0

你想达到什么目的? – Xatenev

+0

它也可能是内存使用瓶颈...... get_file_contents可能会将整个映像读入内存。也许做一个[复制](http://php.net/manual/en/function.copy.php)会更合适 – Orangepill

回答

0

我看到你的代码有一些问题。首先,当您直接在您的代码中使用$_GET输入来获取图像时,您的整体安全性很高。

下一个是为什么你从一个文件中获取内容并将它们写入另一个文件以重定向到它们?如果您每次将文件写入其他位置,这都不是很快。

如果您收到内容echt回应内容并设置正确的标题以显示图像。

header('Content-type:image/png'); 
readfile($fullpath); 

它更容易,你有更少的IO显示文件。否则,你可以使用像PHPThumb这样的脚本生成较小的版本并缓存文件。

http://phpthumb.sourceforge.net/

+0

直接$ _GET输入只是为了简化这个例子。在真实的项目中有很多验证。复制或读取文件都很好,但是如果我需要通过curl获取请求从私有云中获取文件,那么文件的内容就是响应。 –