
正文
关于php64位数据处理的信息
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
在PHP中怎么解决大量数据处理的问题
mysql_query函数查询的方式是查询出全部结果后缓存到内存中php64位数据处理,这样就会出现超内存的现象php64位数据处理,使用另外一个函数mysql_unbuffered_query可以解决这个问题php64位数据处理,mysql_unbuffered_query不会缓存结果集,而是查询出来数据后立马对结果集进行操作,也就是便查询边返回,这样就不会出现超出内存的现象,但是使用mysql_unbuffered_query的是时候不能使用 mysql_num_rows() 和 mysql_data_seek()。并且向 MySQL 发送一条新的 SQL 查询之前,必须提取掉所有未缓存的 SQL 查询所产生的结果行。例如php64位数据处理:
使用缓存结果集的代码:
function selecttest()
{
try {
$pdo = new PDO("mysql:host=localhost;dbname=test", 'root', '123456');
// 不使用缓存结果集方式
// $pdo-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
$sth = $pdo-prepare('select * from test');
$sth-execute();
echo '最初占用内存大小:' . memory_get_usage() . "\n";
$i = 0;
while ($result = $sth-fetch(PDO::FETCH_ASSOC)) {
$i += 1;
if ($i 10) {
break;
}
sleep(1);
print_r($result);
echo '占用内存大小:' . memory_get_usage() . "\n";
}
} catch (Exception $e) {
echo $e-getMessage();
}
}
执行时将会报超出内存的错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 204800000 bytes) in E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php on line 56
Call Stack:
0.0005 135392 1. {main}() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:0
0.0005 135568 2. test-selecttest() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:85
0.0050 142528 3. PDOStatement-execute() E:\ProgramDevelopment\RuntimeEnvironment\xampp\htdocs\test\test.php:56
将上面代码中的$pdo-setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);一行的注释去掉后将不在缓存结果集,这时运行该函数的结果如下:
最初占用内存大小:144808
Array
(
[id] = 1
[a] = v
[b] = w
[c] = i
)
占用内存大小:145544
Array
(
[id] = 2
[a] = b
[b] = l
[c] = q
)
占用内存大小:145544
Array
(
[id] = 3
[a] = m
[b] = p
[c] = h
)
占用内存大小:145536
Array
(
[id] = 4
[a] = j
[b] = i
[c] = b
)
占用内存大小:145536
可以看到,这时返回一条数据内存占用非常的小,也就700多字节,这样就不会出现超出内存的错误php64位数据处理了。
相关问答
Q1: 64位系统php运行报错:1%不是有效的win32应用程序解决
两种可能:
第一种就是文件本身有问题,可以重新下载覆盖看看可否解决。
第二种可能就是与系统版本不兼容会出现这种情况。
可以考虑是否第二种情况,毕竟这种可能性是比较大的。
Q2: PHP 如何在64位系统让32位的整型左移溢出
可以在64bit系统上把补码处理一下
×手上没装64bit的php所以用Java的64bit的long模拟
public class Test {
public static void main(String[] args) {
int a=8366115;
System.out.println("32bit:"+a);
long n=83661L15;
System.out.println("64bit:"+n);
if(n0x7fffffffL){
n--; n=~n; n=0x7fffffffL; n=-n;
}
System.out.println("64bit处理后:"+n);
}
}
32bit:-1553563648
64bit:2741403648
64bit处理后:-1553563648
如不想移植以上的,PHP还可以直接把数值pack()打包成32bit有符号,再按32bit有符号unpack()一次也能得到需要的负数,不过感觉这样效率不如以上直接计算快..
Q3: windows server 2008 r2 64位的操作系统,php连不上mysql数据库,压根没加载,怎么办啊?
找到php.ini文件php64位数据处理,把extension=php_mysql.dll前面php64位数据处理的分号去掉php64位数据处理,然后重启IIS
Q4: win7 64位系统 PHP链接mysql提示下面的错误..PHP是5.3.5版本的..数据库是5.0.22版本的
打开安装目录下php64位数据处理的php.ini
去掉;extension=php_mysql.dll前面php64位数据处理的分号php64位数据处理,试试
Q5: php处理数据的问题
?php
$str = HHH
region=BJ
162.105/16, 166.111/16, 202.4.128/19,
202.112.64/18, 202.112.128/17, 202.113/16, 202.204/14, 210.31/16, 211.68/16, 211.71/16,
211.81/16, 211.82/16, 219.242/16, 219.243.0/17, 219.243.128/18,
219.224.0/17, 219.224.128/18, 219.225/16, 219.226/16, 222.28/14,
222.199/16, 59.64/14, 203.91.120/21, 121.193/16, 121.194/15,
118.228/15, 118.230/16, 121.52.160/19, 115.24/14
region=XA
202.117/16, 202.200/15, 210.26/15, 218.195/16, 219.244/14, 222.23/16, 222.24/15,
59.74/15, 59.76/16, 120.95/16, 115.154/15
region=CD
202.115/16, 202.202/15, 210.40/15, 211.83/16, 218.194/16, 219.221/16, 222.18/15, 222.196/15, 222.198/16, 121.48/15, 120.94/16, 113.54/15
region=GZ
202.38.192/18, 202.116/16, 202.192/15, 210.36/14, 211.66/16, 218.192/16, 219.222/15, 219.227/16,
222.16/15, 222.200/14, 125.216/15, 125.218/16, 116.56/15, 116.13/16,
110.64/15
region=WH
202.114/16, 202.196/15, 210.42/15, 211.69/16, 211.67/16, 211.84/15, 218.196/14, 222.20/15, 222.22/16, 59.68/14,
125.219/16, 125.220/15, 122.204/14, 115.156/15, 115.158/16
region=NJ
202.38.64/19, 202.119/16, 202.194/15, 210.44/15, 210.28/15, 211.64/15, 211.70/16, 211.86/15, 219.218/15, 219.230/15,
222.192/14, 222.206/15, 58.192/15, 121.248/14,
114.212/15, 114.214/16
region=SH
202.120/15, 210.32/14, 211.80/16, 218.193/16, 219.220/16, 219.228/15, 222.204/15, 59.77/16, 59.78/15,
58.198/15, 121.192/16, 111.186/15
region=SY
202.118/16, 202.198/15, 210.46/15, 210.30/16, 219.216/15, 222.26/15, 59.72/15, 125.222/15,
58.154/15, 118.202/15
region=MISC
202.38.96/19, 202.38.140/23, 202.38.184/21, 202.127.216/21, 202.127.224/19, 202.112.0/18, 210.25.128/18,
219.243.192/18, 219.224.192/18, 210.25.0/17
region=CIS
58.194/15, 58.200/13
region=TTN
58.196/15
region=TEIN2
202.179.240/20
HHH;
$reg = '/(?=region=)(\w+)(.+?)(?=region=)/s';
preg_match_all($reg, $str, $matches);
//echo nl2br(var_export($matches, true));
$result = array();
foreach($matches[1] as $key=$val)
{
$header = array("$val");//BJ
$body = explode(',', $matches[2][$key]);//162.105/16, 166.111/16, 202.4.128/19...
$result[] = array_merge($header, $body);//merge array
}
//match last
$str2 = substr($str, strrpos($str, 'region='));
$reg2 = '/(?=region=)(\w+)(.+)/s';
preg_match($reg2, $str2, $matches2);
$tmp = explode(',', $matches2[2]);
array_unshift($tmp, $matches2[1]);
$result[] = $tmp;
echo 'hr';
echo nl2br(var_export($result, true));
?
//换行符不知怎么弄的,就是找不到,所以多出了空格。
php64位数据处理的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、php64位数据处理的信息别忘了在本站进行查找喔。







