我有一堆客户销售点(POS)系统,它定期将新的销售数据发送到一个集中数据库,该数据库将数据存储到一个大数据库中以生成报告.
客户端POS基于PHPPOS,我已经实现了一个使用标准XML-RPC库将销售数据发送到服务的模块.服务器系统基于CodeIgniter构建,并使用XML-RPC和XML-RPCS库作为Web服务组件.每当我发送大量销售数据(销售表中只有50行,以及sales_items中与销售中每个项目相关的各行)时,我会收到以下错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)
Run Code Online (Sandbox Code Playgroud)
128M是默认值php.ini,但我认为这是一个很大的数字.实际上,我甚至尝试将此值设置为1024M,而它所做的只是花费更长的时间来输出错误.
至于我采取的步骤,我已经尝试禁用服务器端的所有处理,并且已经操纵它以返回固定响应而不管输入如何.但是,我认为问题在于实际发送数据.我甚至尝试禁用PHP的最大脚本执行时间,但它仍然出错.
致命错误:允许的内存大小为67108864字节耗尽(尝试分配13965430字节)
PHPInfo显示我有一个128M的memory_limit,所以我很困惑为什么错误说我只有64M.phpinfo是否可能报错?或者为PHP使用两个单独的php.inis?
该错误是由我的一个同事在我不知情的情况下添加的一个主要php文件中的ini_set调用引起的.
在同一个系统中,我可以调用db,并且没有问题,但在某些情况下(使用最大的表),我得到了
" SELECT partidascapturainfo.* FROM partidascapturainfo WHERE partidascapturainfo.partidascapturainfoid IS NOT NULL ORDER BY partidascapturainfoid asc LIMIT 0 , 10 "
Run Code Online (Sandbox Code Playgroud)
我调试了代码,问题是一个基本的查询:
123044,42016,249,3762,2,,0
123045,42016,249,3761,2,,0
123046,42016,249,3764,1,,0
123047,42016,249,3765,,,0
123048,42016,249,3775,,,0
123049,42016,249,3771,3,,0
123050,42016,249,3772,3,,0
123051,42016,250,3844,HAY,,0
123052,42016,255,3852,,,0
123053,42017,249,3761,1,,0
Run Code Online (Sandbox Code Playgroud)
当我在Mysql客户端中运行查询时,查询运行在0.17s
我已经将memory_limit设置为2048,重新启动nginx并且我的查询只返回10行...
这是我的10行:
" SELECT partidascapturainfo.* FROM partidascapturainfo WHERE partidascapturainfo.partidascapturainfoid IS NOT NULL ORDER BY partidascapturainfoid asc LIMIT 0 , 10 "
Run Code Online (Sandbox Code Playgroud)
有什么想法发生了什么?
我目前正在研究Symfony项目(const VERSION ='2.5.10'),我正在使用xampp.PHP版本是5.5.19.
我的问题是每次运行我的开发环境时都会出错:
OutOfMemoryException:错误:在C:\ xampp\htdocs\Editracker\vendor\symfony\symfony\src\Symfony\Component\HttpKernel\Profiler\FileProfilerStorage.php第153行中,允许的内存大小为1073741824字节耗尽(尝试分配3358976字节)
每次刷新页面时,它都会提供不同的内存大小.我也认为这也是我的开发环境在刷新页面之前花费时间的原因.
非常感谢您的帮助.
php.ini中
memory_limit ='256M'
我试图增加内存限制,但它仍然给出了有关内存限制的错误
嗨,
在我的php页面中,我得到如下错误,
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes)
Run Code Online (Sandbox Code Playgroud)
我尝试使用设置内存限制 ini_set('memory_limit', '128M');
但我仍然得到错误.
任何帮助将非常感激.
我有一个大文件(200 MB以上).我需要通过PHP cron job转移它.使用Phpseclib会出现以下错误:
/app/vendor/phpseclib/phpseclib/phpseclib/Net/SSH2.php中允许的内存大小为134217728个字节(尝试分配4133个字节)
有没有办法可以做到这一点PHP cron job?
代码很简单,其中$ localFile是一个已经存在的CSV文件
$sftp->put('/Import/coupons/coupons_import_test.csv', $localFile, NET_SFTP_LOCAL_FILE);
Run Code Online (Sandbox Code Playgroud)
PS.这需要PHP在/tmp文件夹中生成该文件后完成,因此传输脚本的时间必须发挥作用.
[编辑]我不打算增加内存限制,因为以后的文件可能会更大.我可以部分传输文件(附加模式)或使用PHP cron的一些shell脚本的解决方案是值得的
远程服务器上的文件大小为111.4 MB,而本地实际文件大得多.
[修复后编辑]从版本1.0更改为版本2.0.2后问题消失我必须修改put的代码
$sftp->put('/Import/coupons/coupons_import.csv', $localFile, $sftp::SOURCE_LOCAL_FILE);
Run Code Online (Sandbox Code Playgroud) 执行代码时出现以下错误.
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 32 bytes)
Run Code Online (Sandbox Code Playgroud)
尝试过ini_set('memory_limit', '128M');,但没有奏效.我的php.ini文件中的内存限制为128MB.请求帮助.
我正在添加代码.我是php新手,请帮助我解决这个问题.
<?php
require_once 'lib/swift_required.php';
$hostname = '{imap.abc.com:993/imap/ssl}INBOX';
$username = 'username';
$password = 'password';
$connection = imap_open($hostname,$username,$password) or die('Cannot connect to Tiriyo: ' . imap_last_error());
ini_set('memory_limit', '256M');
function Message_Parse($id)
{
global $connection;
if (is_resource($connection))
{
$result = array
(
'text' => null,
'html' => null,
'attachments' => array(),
);
$structure = imap_fetchstructure($connection, $id, FT_UID);
//print_r($structure);
//array_key_exists — Checks if the …Run Code Online (Sandbox Code Playgroud) 我在这里看到过类似的问题,但我的情况完全不同.我正在从数据库中读取并写入xml文件.我收到这个错误
<b>Fatal error</b>: Allowed memory size of 67108864 bytes exhausted (tried to allocate 4459414 bytes) in <b>.../public/home/..</b> on line <b>32</b><br />.
Run Code Online (Sandbox Code Playgroud)
应该是什么解决方案?我是否增加了代码中的内存大小?有帮助吗?
我正在尝试使用simpleXML在php中解析一个中等大小的XML文件(6mb).该脚本从XML文件中获取每条记录,检查它是否已经被导入,如果没有,则将该记录更新/插入到我自己的数据库中.
问题是我经常遇到超出内存分配的致命错误:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 256 bytes) in /.../system/database/drivers/mysql/mysql_result.php on line 162
Run Code Online (Sandbox Code Playgroud)
我通过使用以下行来增加最大内存分配来避免该错误(从此处开始提示):
ini_set('memory_limit', '-1');
Run Code Online (Sandbox Code Playgroud)
然而,然后我遇到60秒的最大执行时间,并且,无论出于何种原因,我的服务器(Mac OS X上的XAMPP)都不会让我增加那个时间(如果我尝试包含脚本,脚本就不会运行像:)这样的一行
set_time_limit(240);
Run Code Online (Sandbox Code Playgroud)
然而,这一切似乎都非常低效; 我不应该能够打破文件的顺序并按顺序处理它吗?在下面的控制器中,我有一个计数变量($ cycle)来跟踪我所在的记录,但我无法弄清楚如何实现它仍然不需要处理整个XML文件.
控制器(我正在使用CodeIgniter)具有以下基本结构:
$f = base_url().'data/data.xml';
if($data = file_get_contents($f))
{
$cycle = 0;
$xml = new SimpleXMLElement($data);
foreach($xml->person as $p)
{
//this makes a single call to db for single field based on id of record in XML file
if($this->_notImported('source',$p['id']))
{
//various process here, mainly breaking up the data …Run Code Online (Sandbox Code Playgroud)