1

我有几个问题一直在寻找答案。

1:php内存分配。

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

而我的php内存分配是64兆,100个人同时访问脚本,会不会导致内存分配错误?

2:如何更好地保存来自 url 的图像?我收到内存分配警告...

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
4

2 回答 2

1

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

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

于 2012-10-22T23:21:44.843 回答
1

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

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

要限制总内存使用量,您必须同时限制并发和每次调用的使用量。

于 2012-10-22T23:21:49.560 回答