重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

php数据库显示2g php数据库显示用户上次访问时间

如何有效用PHP分析超大日志(2G)

这个办法可以提高一些效率: 先把结果存在变量里, 全部读取后再存盘.

十余年的桥东网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整桥东建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“桥东网站设计”,“桥东网站推广”以来,每个客户项目都认真落实执行。

即把这段代码:

if (fwrite($handle_result, $buffer) === FALSE) {

echo "1 record failed to write into log.

";

}

else

{

echo "1 record susseccful to write into log.

";

}

替换成:

$result .= $buffer . "\r\n";

$i++;

然后在while循环之前加上:

/*初始化变量*/

$result = "";

$i = 0;

在循环结束后加上:

if (fwrite($handle_result, $result) === FALSE) {

echo "Failed to write into log.

";

}

else

{

echo "$i records have been written into log susseccfully.

";

}

在PHP中如何实现大文件上传功能(最大可到2G)

2G哦,建议你开个ftp服务器好了。web传输文件最好别打,10M都要你传好久了啊。ftp多好还可以断点续传慢慢传好了。2G太大了点对网速要求太高除非你都在局域网里。

php下载函数,在ie上不能下载大于2G的文件,当文件大于2G的时候,下载下的压缩文件是0KB的,求大神指点。

/**

* 发送文件

*

* @author: legend(legendsky@hotmail.com)

* @link:

* @description: send file to client

* @version: 1.0

*

* @param string $fileName 文件名称或路径

* @param string $fancyName 自定义的文件名,为空则使用filename

* @param boolean $forceDownload 是否强制下载

* @param integer $speedLimit 速度限制,单位为字节,0为不限制,不支持windows服务器

* @param string $$contentType 文件类型,默认为application/octet-stream

*

* @return boolean

*/

function sendFile($fileName, $fancyName = '', $forceDownload = true, $speedLimit = 0, $contentType = '')

{

if (!is_readable($fileName))

{

header("HTTP/1.1 404 Not Found");

return false;

}

$fileStat = stat($fileName);

$lastModified = $fileStat['mtime'];

$md5 = md5($fileStat['mtime'] .'='. $fileStat['ino'] .'='. $fileStat['size']);

$etag = '"' . $md5 . '-' . crc32($md5) . '"';

header('Last-Modified: ' . gmdate("D, d M Y H:i:s", $lastModified) . ' GMT');

header("ETag: $etag");

if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) = $lastModified)

{

header("HTTP/1.1 304 Not Modified");

return true;

}

if (isset($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) strtotime($_SERVER['HTTP_IF_UNMODIFIED_SINCE']) $lastModified)

{

header("HTTP/1.1 304 Not Modified");

return true;

}

if (isset($_SERVER['HTTP_IF_NONE_MATCH']) $_SERVER['HTTP_IF_NONE_MATCH'] == $etag)

{

header("HTTP/1.1 304 Not Modified");

return true;

}

if ($fancyName == '')

{

$fancyName = basename($fileName);

}

if ($contentType == '')

{

$contentType = 'application/octet-stream';

}

$fileSize = $fileStat['size'];

$contentLength = $fileSize;

$isPartial = false;

if (isset($_SERVER['HTTP_RANGE']))

{

if (preg_match('/^bytes=(d*)-(d*)$/', $_SERVER['HTTP_RANGE'], $matches))

{

$startPos = $matches[1];

$endPos = $matches[2];

if ($startPos == '' $endPos == '')

{

return false;

}

if ($startPos == '')

{

$startPos = $fileSize - $endPos;

$endPos = $fileSize - 1;

}

else if ($endPos == '')

{

$endPos = $fileSize - 1;

}

$startPos = $startPos 0 ? 0 : $startPos;

$endPos = $endPos $fileSize - 1 ? $fileSize - 1 : $endPos;

$length = $endPos - $startPos + 1;

if ($length 0)

{

return false;

}

$contentLength = $length;

$isPartial = true;

}

}

// send headers

if ($isPartial)

{

header('HTTP/1.1 206 Partial Content');

header("Content-Range: bytes $startPos-$endPos/$fileSize");

}

else

{

header("HTTP/1.1 200 OK");

$startPos = 0;

$endPos = $contentLength - 1;

}

header('Pragma: cache');

header('Cache-Control: public, must-revalidate, max-age=0');

header('Accept-Ranges: bytes');

header('Content-type: ' . $contentType);

header('Content-Length: ' . $contentLength);

if ($forceDownload)

{

header('Content-Disposition: attachment; filename="' . rawurlencode($fancyName). '"');

}

header("Content-Transfer-Encoding: binary");

$bufferSize = 2048;

if ($speedLimit != 0)

{

$packetTime = floor($bufferSize * 1000000 / $speedLimit);

}

$bytesSent = 0;

$fp = fopen($fileName, "rb");

fseek($fp, $startPos);

//fpassthru($fp);

while ($bytesSent $contentLength !feof($fp) connection_status() == 0 )

{

if ($speedLimit != 0)

{

list($usec, $sec) = explode(" ", microtime());

$outputTimeStart = ((float)$usec + (float)$sec);

}

$readBufferSize = $contentLength - $bytesSent $bufferSize ? $contentLength - $bytesSent : $bufferSize;

$buffer = fread($fp, $readBufferSize);

echo $buffer;

ob_flush();

flush();

$bytesSent += $readBufferSize;

if ($speedLimit != 0)

{

list($usec, $sec) = explode(" ", microtime());

$outputTimeEnd = ((float)$usec + (float)$sec);

$useTime = ((float) $outputTimeEnd - (float) $outputTimeStart) * 1000000;

$sleepTime = round($packetTime - $useTime);

if ($sleepTime 0)

{

usleep($sleepTime);

}

}

}

return true;

}

php检测上传文件大小的问题

在用PHP进行文件上传的操作中,需要知道怎么控制上传文件大小的设置,而文件可传大小是受到多种因素制约的,现总结如下:

1、php.ini:upload_max_filesize 所上传的文件的最大大小。默认值2M。

2、php.ini:memory_limit 本指令设定了一个脚本所能够申请到的最大内存字节数,默认值8M。如果不需要任何内存上的限制,必须将其设为 -1。如果内存不够,则可能出现错误:Fatal error: Allowed memory size of X bytes exhausted (tried to allocate Y bytes)

3、php.ini:post_max_size 设定POST数据所允许的最大大小。此设定也影响到文件上传。要上传大文件,该值必须大于 upload_max_filesize。

4、php.ini:max_execution_time = 30 ; Maximum execution time of each script, in seconds

5、php.ini:max_input_time = 60 ; Maximum amount of time each script may spend parsing request data

6、如果用到mysql的BLOB进行二进制文件存储,则需要设置my.ini:max_allowed_packet=xxM

7、httpd.conf

在 Apache 里面有一个选项是 LimitRequestBody,这个选项可以限制用户送出的 HTTP 请求内容。这个选项可以在 .htaccess 或 httpd.conf 里使用,而如果在 httpd.conf 内使用,分别可以用在 virtualhost 或目录属性设定。而 LimitRequestBody 的设定值是介乎 0 (无限制) 至 2147483647 (2GB)。

例如要在目录 D:/AppServ/www 设定上传限制为 100K,可以在 .htaccess 或 httpd.conf 加入以下语句:

LimitRequestBody 1024000000

Options Indexes FollowSymLinks MultiViews ExecCGI

AllowOverride All

Order allow,deny

Allow from all

LimitRequestBody 1024000000Options Indexes FollowSymLinks MultiViews ExecCGIAllowOverride AllOrder allow,denyAllow from all

如果透过 .htaccess 设定,储存档案后会立即生效;如透过 httpd.conf 设定,须要重新启动 Apache。

PHP关于文件上传部分,特别提到表单隐藏域:MAX_FILE_SIZE,意思是接收文件的最大尺寸。文档中给出的例子如下:

form enctype="multipart/form-data" action="_URL_" method="POST"

input type="hidden" name="MAX_FILE_SIZE" value="30000"

Send this file: input name="userfile" type="file"

input type="submit" value="Send File"

form

Send this file:

这里设置MAX_FILE_SIZE = 30000,期待一种可能,使得浏览器在传送文件之前能够依此作出预先判断,如果文件尺寸大于30000字节,则不执行实际的POST动作。也就是不往服务器发送文件内容,而是直接在客户端提醒用户“你试图上传的文件超过30000字节”。

这的确是一个非常棒的主张,但在现实中却暂时无法实现。不是因为这个限制可以“被简单地绕过”,而是IE和FireFox这两个主流浏览器都不支持这个特性。PHP的这个建议尚未被采纳。

MAX_FILE_SIZE还有一个用场:后台PHP会判断接收到的文件大小是否大于这个值,如果超出,$_FILES['thisfile']['error']会被设置为UPLOAD_ERR_FORM_SIZE(2),同时放弃保存临时文件,将$_FILES['thisfile']['size']置0。

这个例子,没问题,表现正常,当我试图上传一个40多K的文件时,PHP程序报告“文件超过MAX_FILE_SIZE”。

但是,如果我们将表单中的MAX_FILE_SIZE从30000减少到1000,情形又如何呢?

上传800字节的文件,正常;

上传40K的文件,PHP报告文件过大,也正常;

上传3000个字节的文件,PHP未报告错误,它成功保存了文件!出乎意料!

问题就出在main/rfc1867.c中判断文件是否超长的这部分代码上。php每次从buffer中读取FILLUNIT字节长度的内容后,首先判断“已经读到的内容长度(total_bytes)”是否大于MAX_FILE_SIZE,然后再增加“已经读到的内容长度(total_bytes)”。这样一来,和预计的结果之间至多会有FILLUNIT字节的误差,而FILLUNIT=1024*5=5K。(点击bug了解详细内容)

这就是说,当MAX_FILE_SIZE5K时,上传一个大于MAX_FILE_SIZE,但是小于5K的文件是没有问题的。

当然,因为这个设置很容易被绕过,所以服务器端编程不应当依赖于MAX_FILE_SIZE。而且,5K到底是个很小的数值,对大多数上传文件的表单来说没有影响。

PHP中post_max_size,upload_max_filesize, MAX_FILE_SIZE的设置,和客户端上传给服务器端的流量大小无关。

Apache服务器从客户端接收长度不超过LimitRequestBody字节数的请求,然后传送给php模块,php模块再决定是否保存成临时文件,设置$_FILES全局变量,移交给script进一步处理。

这个Apache的LimitRequestBody选项缺省值=0,允许Request body的最大字节数是2G(Linux + Apache)

最后还要注意的是:

html本身能够post数据也是有限制的,不能超过2G。

FTP客户端有文件偏移指针的2GB边界限制,未使用特殊编译flag编译的ftp服务器端或者客户端,无论在什么FS中都不支持大于2GB的文件。不知道PHP会不会也有这种情况。

php 2G 大的文件上传不了 服务器也配置了~ 什么原因 如何解决~~

大文件上传,最好采用其它方式,比如ftp之类的,http上传很容易出问题,而且也受到服务器的限制,比如内存大小,比如磁盘分区格式之类

为什么我的PHP7.2.1内存最大限定5G,实际却无法超过1G

一般大型网站memory_limit用默认的128M都完全没问题,你的要5G?是要一次性处理几个G的POST数据吗?那肯定是你的程序有问题,一般情况下不需要这么大内存占用的。

以下是我个人看法,未经测试,权当参考:尽管你的系统是64位的,但你的PHP是32位的,因此最大的内存寻址范围也就是2G,再加上PHP本身的占用,实际可供分配的就是1G了。

因此我认为你目前的重点不是如何扩大PHP的内存限定,而是要优化你的脚本代码。


网页名称:php数据库显示2g php数据库显示用户上次访问时间
本文网址:http://cqcxhl.cn/article/hpjpjp.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP