- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我目前被 PHP 脚本中的一个莫名其妙的奇怪错误困住了,这让我连续两天都抓狂了。在您提问之前,我已经对该主题进行了一些研究并找到了一些线程,但是建议的答案都没有任何效果 :( 因此我想详细描述正在发生的事情(或失败的 :D)以及如何它可以解决,希望你们中的任何人都有一些好主意:)
情况:我正在设置一个由 PHP 从 MYSQL-Data 生成的网页。目标服务器正在运行 PHP 5.3.3,我的本地 XAMPP 安装在 PHP 5.3.8 上。现在我看到一些奇怪的行为从数据库中获取数据。失败的代码基本上是这样的:
$results = array();
foreach($a as $b):
$results[] = get_MYSQL_Data($b);
endforeach;
现在,每次我尝试在本地安装上运行代码时,脚本都会在加载 20-25 秒后停止在循环内某处执行。 Loop之后生成的所有内容根本就不输出。所有错误报告选项都设置为最大值,甚至 Apache-、PHP- 或 MYSQL-Errorlog 也不显示任何内容。循环本身正在收集大约 40 个 MYSQL 记录(恕我直言,数量不多)。有趣的是,在目标网络服务器上运行的相同脚本就像一个魅力,并在 1-2 秒内加载整个页面。
方法由于脚本在网络服务器上运行,我比较了 XAMPP 和网络服务器上 phpinfo() 的输出,并检查了与“缓冲区”、“超时”、“最大大小”等有点关系的每个值,只是找出他们是平等的。我还调整了本地 php.ini 中的值以匹配网络服务器配置。这些都没有任何效果。如前所述,我还尝试了其他几篇相关帖子中可能的解决方案,例如设置 max_execution_time 等等。
解决方法因为我认为这可能是缓冲区/内存或任何问题,所以我开玩笑地尝试重载缓冲区,就像某些人在尝试显示 PHP-Progress-Bar 时所做的那样。将循环更改为
$results = array();
foreach($a as $b):
$results[] = get_MYSQL_Data($b);
echo str_repeat(' ', 550);
endforeach;
其中 550 是回显的最低工作符号数(试错法 :D)突然使脚本工作。基本上回显循环词末尾超过 549 个字符的任何内容(因为我也尝试打印出 $results-Array)。这种解决方法可能适合开发,但不适用于生产,所以我真的需要(并且希望 :))解决这个问题。
由于我找不到任何其他设置或无法更改 Apache、PHP 或 MYSQL(尽管我认为它与 MYSQL 无关),我还没有检查和尝试过,我真的希望你们中的一些人会有灵感来帮助我:)
真诚地提前感谢任何人的帮助和最诚挚的问候
亚历克斯
--------------------更新--------------------
好的,所以我们在这里提供完整的信息:)您找到的所有 PHP 常量都代表 MYSQL 列名。
这是持有 foreach 循环的函数。传递的数组 $pruefungen 是一个简单的一维数组,它将被扩展并从中获取 MYSQL 条件的“PRUEFUNG_ID”:
function stgGetSemArray($pruefungen) {
foreach ($pruefungen as $key => $pruefung):
/* MYSQL-Parameters are stored in Arrays */
$selects = array(TAB_PERSON_DETAILS_ID);
$tables = array(TAB_PERSON, TAB_PRUEFUNG);
$conditions = array(TAB_PRUEFUNG . '.' . TAB_PRUEFUNG . TAB_DETAILS_ID => $pruefung[TAB_PRUEFUNG . TAB_DETAILS_ID]);
/* MYSQL-Query is conducted */
$personIDs = db_multipleColumns($selects, $tables, $conditions);
/* new Data is stored in $pruefungen */
$pruefungen[$key][TAB_PERSON . TAB_DETAILS_ID] = $personIDs[0];
/* MYSQL-Parameters are stored in Arrays */
$selects = getListViewColumns(TAB_PERSON);
$tables = array_keys($selects);
$conditions = array(TAB_PERSON . '.' . TAB_PERSON . TAB_DETAILS_ID => $personIDs[0]);
/* MYSQL-Query is conducted */
$personNameData = db_multipleColumns($selects, $tables, $conditions);
/* new Data is stored in $pruefungen (translateAndFOrmat is just some basic texthandling */
$pruefungen[$key][TAB_PERSON] = translateAndFormatItem(TAB_PERSON, $personNameData[0], OUTPUT_FORMAT_HEADDING);
/* yeah, you know..... */
echo str_repeat(' ', 550);
endforeach;
return $pruefungen;
}
要获取的 MYSQL 表、要从中获取它们的表以及 MYSQL 的条件存储在数组中并由函数 db_multipleColumns() 处理,如下所示:
function db_multipleColumns($select, $table, $condition = array()) {
global $con; //the MYSQLi-Connection
/* Query-Columns */
$query = 'SELECT ' . implode(', ', $select);
/* Query-Tables, getDirectRelation returns a String like "pruefung LEFT JOIN dozent ON pruefung.dozentID=dozent.dozentID" */
$query.= ' FROM '.getDirectRelation($table);
/* Query-Conditions (only if passed) */
$conditions = array();
foreach ($condition as $condColumn => $condValue):
$conditions[] = $condColumn . ' IN (' . implode(', ', $condValue) . ')';
endforeach;
if (!doCheckVarEmpty($conditions)):
$query .= ' WHERE ' . implode(' AND ', $conditions);
endif;
/* submit Query */
$data = $con->query($query) or die($con->error);
/* fetch data from Query */
$resultMatrix = array();
while ($row = $data->fetch_assoc()):
$resultMatrix[] = $row;
endwhile;
/* clear MYSQL-Memory */
$data->free();
return $resultMatrix;
}
由函数生成的 MYSQL 查询如下所示:
SELECT person.person_ID, person.vorname, person.nachname, titel.name FROM person LEFT JOIN titel ON person.titel_ID=titel.titel_ID WHERE person.person_ID=1
前五次循环执行返回的记录是:
person_ID | vorname | nachname | name
1 | Gerd | Bacher | Prof. Dr. rer. nat.
2 | Franz-Josef | Tegude | Prof. Dr. rer. nat.
3 | Roland | Schmechel | Prof. Dr. rer. nat.
4 | Frank Einar | Kruis | Prof. Dr.-Ing.
5 | Wolfgang | Mertin | Dr.-Ing.
如前所述,循环运行大约 30-40 次迭代。
希望这会以某种方式让我们走得更远 :)
最佳答案
如果 $a 有一个有效的有效数据数组,$b 可以成为运行 get_MYSQL_Data($b) ... 那么你检查过 get_MYSQL_Data($b) 是否挂起了吗?我没有看到 get_MYSQL_Data($b) 的源代码,因此不得不假设它是发送给它的无效数据,或者由于其他原因挂起。
$a 和函数 get_MYSQL_Data 的示例数据(源代码,而非示例)将非常有用。 :)
关于PHP 脚本在 foreach 循环期间退出而没有错误,通过 echo long strings 解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30000539/
我有 powershell 脚本。通过调度程序,我运行 bat 文件,该文件运行 PS1 文件。 BAT文件 Powershell.exe -executionpolicy remotesigned
什么更快? 或者 $.getScript('../js/SOME.js', function (){ ... // with $.ajaxSetup({ cache: true });
需要bash脚本来显示文件 #!/bin/bash my_ls() { # save current directory then cd to "$1" pushd "$1" >/dev/nu
我有一个输入 csv 文件,实际上我需要在输入文件中选择第 2 列和第 3 列值,并且需要转换两个值的时区(从 PT 到 CT),转换后我需要替换转换后的时区值到文件。 注意: 所有输入日期值都在太平
我正在使用/etc/init.d/httpd 作为 init.d 脚本的模板。我了解文件中发生的所有内容,但以下行除外: LANG=$HTTPD_LANG daemon --pidfile=${pid
我有以下选择: python runscript.py -O start -a "-a "\"-o \\\"-f/dev/sda1 -b256k -Q8\\\" -l test -p maim\""
我对 shell 脚本完全陌生,但我需要编写一个 shell 脚本来检查文件是否存在,然后移动到另一个位置 这是我写的: 一旦设备崩溃,我就会在/storage/sdcard1/1 中收集日志 #!/
我正在使用 bash 脚本从文本文件中读取数据。 数据: 04:31 Alex M.O.R.P.H. & Natalie Gioia - My Heaven http://goo.gl/rMOa2q
这是单击按钮时运行的 javascript 的结尾 xmlObj.open ('GET', /ajax.php, true); xmlObj.send (''); } 所以这会执行根目录中的php脚本
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我需要将文件转换为可读流以通过 api 上传,有一个使用 fs.createReadStream 的 Node js 示例。任何人都可以告诉我上述声明的 python 等价物是什么? 例子 const
我有一个 shell 脚本 cron,它从同一目录调用 python 脚本,但是当这个 cron 执行时,我没有从我的 python 脚本中获得预期的输出,当我手动执行它时,我的 python 脚本的
如何使 XMLHttpRequest (ajax) 调用的 php 脚本安全。 我的意思是,不让 PHP 文件通过直接 url 运行,只能通过脚本从我的页面调用(我不想向未登录的用户显示数据库结果,并
我正在尝试添加以下内容 我正在使用经典的 asp。但我不断收到的错误是“一个脚本 block 不能放在另一个脚本 block 内。”我尝试了此处的 document.write 技术:Javasc
如何从另一个 PHP 脚本(如批处理文件)中运行多个 PHP 脚本?如果我了解 include 在做什么,我认为 include 不会起作用;因为我正在运行的每个文件都会重新声明一些相同的函数等。我想
我想创建具有动态内容的网页。我有一个 HTML 页面,我想从中调用一个 lua 脚本 如何调用 lua 脚本? ? ? 从中检索数据?我可以做类似的事情吗: int xx = 0; xx
我删除了我的第一个问题,并重新编写了更多细节和附加 jSfiddle domos。 我有一个脚本,它运行查询并返回数据,然后填充表。表中的行自动循环滚动。所有这些工作正常,并通过使用以下代码完成。然而
我尝试使用 amp 脚本,但收到此错误: “[amp-script] 脚本哈希未找到。amp-script[script="hello-world"].js 必须在元[name="amp-script
我有一个读取输入的 Shell 脚本 #!/bin/bash echo "Type the year that you want to check (4 digits), followed by [E
我正在从 nodejs 调用 Lua 脚本。我想传递一个数组作为参数。我在 Lua 中解析该数组时遇到问题。 下面是一个例子: var script = 'local actorlist = ARGV
我是一名优秀的程序员,十分优秀!