草庐IT

php - 改进 PHP 导入脚本的内存使用

我有一个导入CSV文件并经历数万次迭代的PHP脚本。随着脚本运行数小时,内存使用量不断增加,如果文件足够大,脚本会耗尽大量内存,以至于整个机器都停止运行。现在我使用的唯一技术是在完成后尽我所能unset()。我试图隔离使用最多内存的部分,但似乎我脚本中的每个函数都只是压在Camel背上的一根稻草,并且使用“尽可能少的内存”。那我该怎么办呢?我尝试研究基准测试/分析工具,但没有找到任何好的东西。我在Windows机器上,通过SSH连接到Linux机器。 最佳答案 好吧,既然你在寻找技术,那我就列举一些...1。不要读取文件,流式传输它

PHP导出巨大的excel文件

我正在使用PHPExcelphp中的类从mysql表中导出数据。php页面简单地在循环中写入excel数据,如:$objPHPExcel=newPHPExcel();#Queryresultgoestoarray$result#...$i=1;for($r=0;$rsetActiveSheetIndex(0)->setCellValue("A$i",$value1)->setCellValue("B$i",$value2)->setCellValue("C$i",$value3);$i++;}$objWriter=PHPExcel_IOFactory::createWriter($ob

未使用偏移量的 PHP 数组内存消耗

很抱歉,如果这个问题已经在其他地方得到了回答,但我找不到它(可能是因为我很难正确地表达我的问题)。我正在使用一个双维数组,它是数据库查询的结果集。我已经设置了数组,所以数组的第一个索引是行数组的pk,所以数组看起来像......$array[345]={'id'=>345,'info1'=>'lorem','infor2'=>'ipsum'}$array[448]={'id'=>448,'info1'=>'lorem','infor2'=>'ipsum'}我的问题...我知道索引是作为整数传递的。所以,我在想(也许是错误的)它们被数组视为数字偏移量(而不是关联)。因此,如果第一个索引是

php - Symfony2 chain_provider in_memory 用户登录 "bad credentials"

我想要一个硬编码的管理员用户,其余用户来自数据库。当我使用db用户登录时,它可以工作,但如果我使用硬编码的管理员用户登录,它会显示“Badcredentials”错误。这是我的security.yml文件的一部分:security:encoders:Valoran\DrushBundle\Entity\User:algorithm:bcryptcost:15role_hierarchy:ROLE_ADMIN:ROLE_USERROLE_SUPER_ADMIN:[ROLE_USER,ROLE_ADMIN,ROLE_ALLOWED_TO_SWITCH]providers:chain_pro

PHP 内存耗尽 (json_decode)

当我的应用程序尝试解码大型(15K~行)JSON字符串(来自CURL)时,它失败了:Allowedmemorysizeof134217728bytesexhausted(triedtoallocate91bytes)我知道我可以扩展内存限制或取消限制,但我宁愿避免这样做。我一直想知道是否有不同的方法来解决这类问题-例如将JSON字符串拆分成小块(如array_chunk)。更新为了确保问题不是由应用程序中的任何其他函数/循环引起的,我将JSON字符串提取到一个文件中并尝试直接从文件中对其进行解码(文件大小=11.8MB)。仍然失败。$y=json_decode(file_get_con

PHP ini_set 内存限制

当我们在代码中像下面这样使用ini_set时,所有其他代码的内存限制是否相同?或者只对我们添加的代码有效?ini_set('memory_limit','512M');谢谢 最佳答案 它只对写入它的文件有效。更改同一文件夹中多个php设置的最佳方法是:1。使用以下行创建名为“.htaccess”的文件php_valuememory_limit'512M'请记住,这仅在您的服务器配置允许此目录的“AllowOverride”指令时有效2。使用您的配置选项添加自己的php作为auto-prepend-file您可以在php.ini中执行

php - 在 PHP 中调试内存泄漏/使用错误的工具/技术

我有一个命令行脚本,它通过循环运行文件的array(),并使用文件名作为参数来调用辅助对象的方法。每次运行脚本,PHP的memory_get_usage报告一个越来越大的数字53294264570196246137462465699176702306007515715279900392846304728935926494300016100031176105202448110360808115777528121146976126784824132366952直到我出错PHPFatalerror:Allowedmemorysizeof134217728bytesexhausted很明显,某

PHP 内存限制

我有一个小问题,当我们为PHP设置memory_limit时,我了解到它将使用该整数作为允许脚本使用的最大内存。这是否意味着如果我将最大值设置为64MB,而我的脚本只需要12MB,那么它会利用全部64MB,因为这是允许的?我问是因为我注意到我的一些脚本虽然使用了12MB(使用get_memory_usage发现)但是httpd进程本身接近64MB标记,即使这是唯一运行的脚本!顺便说一句,我没有内存泄漏问题。它产生的其他进程(即CMD)是否也会被添加到httpd进程的整体内存使用情况中?感谢大家帮助我解决这个问题。 最佳答案 PHP的

php - 带有 php ://memory 的 PDFTK

问题:是否可以在exec或passthru命令上使用php://memory?我可以在exec或passthru中使用php变量没有问题,但我在使用php://memory时遇到了问题背景:我正在尝试消除所有使用PDFTK编写的临时pdf文件。1)我正在写一个临时的fdf文件2)使用#1填写临时pdf文件3)对所有pdf重复#1和#24)将所有pdf合并在一起。这目前有效-但它会创建大量文件,并且是瓶颈。我想通过使用虚拟文件php://memory来加快pdftk的速度首先,我试图虚拟化#1中使用的fdf文件。单独回答这个问题就足以获得“正确答案”。:)代码如下:$fdf='fdffi

php - XSLTProcessor xmlSAX2Characters : out of memory

我有一个加载500mbxml文件并使用xsl模板解析该文件的页面。解析器在我的本地环境中完美运行。我正在使用WAMP。在网络服务器上。警告:DOMDocument::load()[domdocument.load]:(null)xmlSAX2Characters:/home/mydomain/public_html/xslt/largeFile.xml中内存不足,行:2031052in/home/mydomain/public_html/xslt/parser_large.php第6行我的代码如下,第6行加载xml文件$xslDoc=newDOMDocument();$xslDoc->