记忆策略

时间:2012-10-22 23:17:26

标签: php memory-management file-get-contents readfile

我有一些问题,我一直在寻找答案。

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

2 个答案:

答案 0 :(得分:1)

假设您正在讨论memory_limit配置指令,这是对每个脚本执行可以使用的内存量的限制,因此限制为64M 每个用户同时访问,而不是同时访问所有用户64M,并且您不会超过它。其目的是防止,例如,一个脚本试图调整需要数百兆字节内存来完成的巨型图像,或者在没有终止的情况下累积大数据字符串的失控循环,而不是对可能的并发访问设置上限。 / p>

这并不是说你不能在脚本上用尽太多的并发来耗尽服务器的可用内存。在这种情况下,服务器可能会开始分页,并对性能产生非常不利的影响。但是,它不应该出错并停止响应请求。

答案 1 :(得分:1)

PHP的内存分配是每次调用。在许多PHP模型(例如fcgi)中,一个PHP进程并不了解其他PHP进程,因此这是唯一的实用版本。

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

要限制总内存使用量,您必须一致地限制并发和每次呼叫使用。

相关问题