mysql — PHP пропускает операторы печати в цикле while после выполнения mysqli, но показывает печать после цикла

У меня есть скрипт php, и по какой-то причине он пропускает пару операторов print после выполнения mysqli, но печатает после цикла. Есть идеи? Я переместил скрипт на другой сервер. БД (все еще) находится в маленькой скале, Арканзас. Сервер сценариев находился в Литл-Роке, штат Арканзас, а теперь в Пенсильвании. Это пингует хорошо. Я вижу это:

PING littlerock db (ip...) 56(84) bytes of data.
64 bytes from littlerock (ip...): icmp_seq=1 ttl=56 time=36.5 ms

и он продолжает идти, и я выхожу из него через несколько минут.

Когда я запускаю скрипт на старом сервере, это занимает 5 минут. На новом сервере это занимает час и в то же время пропускает последние пару операторов печати. (см. // отсутствует)

Я слышал о неверном связывании, и затем сценарий останавливается после связывания, но в этом случае он продолжается после цикла while. Но я не изменил запрос или привязку, так что все должно быть в порядке. Я не уверен, как отладить это или что искать в Интернете. Я попытался постепенно комментировать и раскомментировать, и обнаружил, что, начиная с выполнения stmt4 в цикле while, сценарий замедляется.

я сделал

php -i | grep max_execution_time

и посмотреть

max_execution_time => 0 => 0

что, я думаю, означает, что максимума нет, поэтому время не должно превышаться.

Я сделал скрипт php script.php и увидел что-то вроде этого:

write(9, "\17\0\0\0\27\1\0\0\0\0\1\0\0\0\0\0\2AR", 19) = 19
read(9, "\1\0\0\1\0017\0\0\2\3def\7netcool\7domains\7do"..., 16384) = 93
poll([{fd=6, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
poll([{fd=6, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
write(6, "\210\0\0\0\27\1\0\0\0\0\1\0\0\0\4\20\0\0\f10.66.46.141\17"..., 140) = 140
read(6, "\7\0\0\1\0\0\0\2\0\4\0", 16384) = 11
poll([{fd=8, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
poll([{fd=8, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
write(8, "\32\0\0\0\27\1\0\0\0\0\1\0\0\0\0\0\6Adtran\6TA5000", 30) = 30
read(8, "\1\0\0\1\3M\0\0\2\3def\7netcool\22vendor_mod"..., 16384) = 286
poll([{fd=9, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
poll([{fd=9, events=POLLIN|POLLPRI}], 1, 0) = 0 (Timeout)
write(9, "\17\0\0\0\27\1\0\0\0\0\1\0\0\0\0\0\2AR", 19) = 19

но тогда Ctrl-C / Z из этого.

<?php
print "zero \n";
error_reporting(E_ALL ); //& ~E_NOTICE | ~E_WARNING
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR ."logGen/loggen.class.php");
$err = new logGen('e', '/opt/na/NAC_Dslam/junk/logexample.log', TRUE);

$err->logThis("Running script");

// Date information
date_default_timezone_set('America/Chicago');//date_default_timezone_set
$last_week = strtotime("last week");
$last_week = Date('Y-m-d H:i:s', $last_week);
print "one \n";

// Oracle Connection details
$db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = <host>)(PORT = <port>)))(CONNECT_DATA=(SID=<db>)))";
$conn = oci_connect("<u>", "<p>", $db);

$query = "SELECT * FROM table1.view1 WHERE Vendor IN ('Ad','Cal') AND IP_ADDRESS NOT IN('RQ...', '0.0.0.0')";

$ora_stmt = oci_parse($conn, $query);
oci_execute($ora_stmt);
print "one b \n"; //i see this
//depo NAC Connection Details
$mysqli0 = new mysqli('<host>', '<u>', '<p>', "db1");

print "two \n"; //see this
// db connection details
$mysqli3 = new mysqli('<host>', '<db>', '<u>', '<p>');

// Only insert new records, any records that have just been modified should be updated instead. This is blocked via the
//  node's IP as it is a unique key in the Netcool sis_elements table.
$stmt6 = $mysqli0->prepare("INSERT INTO mytable1(node_ipv4, nodealias, fqdn, region, State, class, vendor, model, head_node_monitor_pt, domain, date_updated, date_created)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())
ON DUPLICATE KEY UPDATE node_ipv4=?, nodealias=?, fqdn=?, region=?, State=?, class=?, vendor=?, model=?, head_node_monitor_pt=?, domain=?");
print "two b\n"; //see this
$stmt6->bind_param('ssssssssssssssssssss', $db_ipv4, $db_nodealias, $db_fqdn, $db_region, $db_state, $db_class, $db_vendor, $db_model, $db_head_node,$db_domain,
$db_ipv4, $db_nodealias, $db_fqdn, $db_region, $db_state, $db_class, $db_vendor, $db_model, $db_head_node, $db_domain);

// db connection details
$mysqli4 = new mysqli('<db>', '<table>', '<u>', '<p>');
print "three \n"; //see this
$stmt4 = $mysqli4->prepare("SELECT vendor, model, class
FROM vendor_model_class
WHERE source_system = 'DMV'
AND vendor = ?
AND model = ?");
print "three b\n"; //see this
$stmt4->bind_param("ss", $db_vendor, $db_model);
$stmt4->bind_result($set_vendor, $set_model, $set_class);
print "three c\n";
// dbconnection details
$mysqli5 = new mysqli('<host>', '<db>', '<u>', '<p>');

$stmt5 = $mysqli5->prepare("SELECT domain
FROM domains
WHERE state = ?");
print "four \n"; //see this
$stmt5->bind_param("s", $db_state);
$stmt5->bind_result($db_domain);
print "five \n"; //see this

$i = 0;
// Loop through the results
while($row = oci_fetch_array($ora_stmt, OCI_ASSOC+OCI_RETURN_NULLS)) {

$db_state = trim($row['STATE']);
$db_nodealias = trim($row['DSLAM']);
$db_vendor = trim($row['VENDOR']);
$db_model = trim($row['MODEL']);
$db_region = trim($row['STATE']);
$db_state = trim($row['STATE']);
$db_nodealias = trim($row['DSLAM']);
$db_ipv4 = trim($row['IP_ADDRESS']);
$db_head_node = trim($row['HEAD_NODE_MONITOR_PT']);
$db_monitor_cat = trim($row['MONITORING_CATEGORY']);

$stmt4->execute(); //it's slow after this event if I comment the rest of while loop out
if($i % 10 == 0)
print "five b " . $i++. "\n"; //I see five b 0 and that's it
while($stmt4->fetch()) {}

$db_class = $set_class;

$stmt5->execute();
if($i % 10 == 0)
print "six " . $i++. "\n"; //missing
while($stmt5->fetch()) { }

$stmt6->execute();
if($i % 10 == 0)
print "seven " . $i++. "\n";  //missing
}

print "eight \n"; //I see this
$mysqli4->close();
$mysqli5->close();
$mysqli0->close();
?>

0

Решение

Смотрите под петлями:

while($row = oci_fetch_array($ora_stmt, OCI_ASSOC+OCI_RETURN_NULLS))

Когда цикл запущен, $ i равен 0, поэтому вы можете увидеть текст «пять б» …

И тогда $ i будет 1 из-за выражения $ i ++. Таким образом, любые другие условия, если заявления не являются правильными.

——————— Vaild Решение, которое вы хотите —————————

// Loop through the results
while($row = oci_fetch_array($ora_stmt, OCI_ASSOC+OCI_RETURN_NULLS)) {

$db_state = trim($row['STATE']);
$db_nodealias = trim($row['DSLAM']);
$db_vendor = trim($row['VENDOR']);
$db_model = trim($row['MODEL']);
$db_region = trim($row['STATE']);
$db_state = trim($row['STATE']);
$db_nodealias = trim($row['DSLAM']);
$db_ipv4 = trim($row['IP_ADDRESS']);
$db_head_node = trim($row['HEAD_NODE_MONITOR_PT']);
$db_monitor_cat = trim($row['MONITORING_CATEGORY']);

$stmt4->execute(); //it's slow after this event if I comment the rest of while loop out
if($i % 10 == 0)
print "five b " . $i. "\n";
while($stmt4->fetch()) {}

$db_class = $set_class;

$stmt5->execute();
if($i % 10 == 0)
print "six " . $i. "\n";
while($stmt5->fetch()) { }

$stmt6->execute();
if($i % 10 == 0)
print "seven " . $i. "\n";
$i++;
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]