存储字符串时Php变量的大小限制是多少?
情况就是这样:
我有一个名为myDB.sql的2Gb转储文件.它是一个转储文件,用于删除现有数据库并使用视图和触发器创建新数据库.所以我有很多代码行的字符串myDB_OLD. 我想将这些字符串出现更改为myDB_NEW. 我可以使用notePad轻松地做到这一点.但记事本不会打开2Gb文件. 我所做的是一个 PHP代码,它逐行读取并查找并替换我想要的字符串. 这是代码: $myfile2 = fopen("myDB.sql","r") or die("Unable to open file!");//Reads the file while (!feof($myfile2)) {//Pass trough each line $str=fgets($myfile2);//Store the line inside a variable if (preg_match("/myDB_OLD/",$str)) {//If the string I want to change exists - replace it and conacatenate $newStr .= str_replace("myDB_OLD","myDB_NEW",$str); } else {//If not concatenate it $newStr .=$str; } }//End of while fclose($myfile2); //Save the newStr in a new file named $myfile = fopen("newDB.sql","w") or die("Unable to open file!"); fwrite($myfile,$newStr); echo "finished"; 此代码检索文件的每一行更改字符串,在变量中连接并创建一个新文件.它应该有效,但事实并非如此.我不知道为什么.我正在使用xdebug来找出问题所在,但没有运气. 所以我改变了方法. 这是新代码: $myfile = fopen("newDB.sql","w") or die("Unable to open file!");//Creates a new file "newDB.sql" $myfile2 = fopen("myDB.sql","r") or die("Unable to open file!");//Reads the file while (!feof($myfile2)) {//Pass trough each line $str=fgets($myfile2);//Store the line inside a variable if (preg_match("/myDB/",$str)) {//If the string I want to change exists - replace it . (Do not concatenate) $strRep=str_replace("myDB",$str); } else { $strRep =$str; } fwrite($myfile,$strRep);// Add the new line to the file "newDB.sql" }//End of while fclose($myfile); fclose($myfile2); echo "finished"; 好吧,我解决了我的问题,但它提出了一个想法.第一个代码有什么问题?
是. A string can be as large as up to 2GB (2147483647 bytes maximum).您无法通过增加php.ini中的memory_limit指令来覆盖此限制. From php7在64位系统中没有这个限制:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |