2012-10-22 162 views
1

我有几个问题,我一直在寻找答案。内存策略

1:Php内存分配。

如果我有一个1兆字节变量$img =file_get_contents('imageUrl');

和我的PHP内存分配是64兆,并有100人在同一时间访问脚本,就是要引起内存分配错误?

2:如何更好地保存网址中的图片? 我得到一个内存分配警告...

if ($fileName){ 
    //check to make sure filename is not taken 
    if(!file_exists("img/".$fileName.$fileExt)){ 
      $image = file_get_contents("someURL".$fileName.$fileExt); 
     //check to make sure the filesize is not rediculous 8 Megabytes. 
     if(strlen($image) < (8 * 1048576)){      
      if(file_put_contents("img/".$fileName.$fileExt, $image)){ 
       usleep((0.25 * 1000000)); //rest 1/4 second 
        if(!image_resize("img/".$fileName.$fileExt, 202, 202, 1))die('no rezize'); 
      //PRETEND THERE ARE CLOSING CURLY BRACES THANKS 
+1

只是复制它copy ['http://example.com/example.jpeg','/example/example.jpeg');' – 2012-10-22 23:31:06

+0

我还需要做一个缩略图版本... – user1290323

+0

复制第一个然后制作大拇指 – 2012-10-22 23:33:46

回答

1

假设你正在谈论的memory_limit配置指令,即在记忆每个脚本执行可以消耗的量的限制,所以限制是64M每个用户同时访问,而不是64M所有用户同时,你不会超过它。其目的是防止一个脚本尝试调整需要完成数百兆内存的巨型映像的大小,或者避免在不终止的情况下累积大数据字符串的失控循环,而不是限制可能的并发访问。

这并不是说你不能耗尽服务器的可用内存,但脚本的并发性太高。在这种情况下,服务器可能会启动分页,并对性能产生负面影响。但是,它不应该错误并停止响应请求。

1

PHP的内存分配是每次调用。在许多PHP模型(例如fcgi)中,一个PHP进程不知道其他的进程,所以这是唯一的实际版本。

所以说:不,这不会引发分配错误,但它会使用100MB

要限制总的内存使用情况,你必须限制并发和每个呼叫的使用在演唱会。