Ich habe ein einfaches PHP-Skript, das als Cron-Job ausgeführt wird. Es dient dazu, die Kopfzeilen einer Webseite zu überprüfen und zu melden, wenn sich verschiedene Elemente geändert haben.Einfaches PHP-Skript mit 290 MB Speicher - warum?
Ich habe verschiedene Versionen dieses Skripts in der Vergangenheit verwendet und es hat immer gut funktioniert, aber jetzt verwende ich es auf einem Server, der Warnungen per E-Mail sendet, wenn Skripte mehr als 100 MB Speicher verwenden (außer Whitelist-Skripte natürlich), und überraschenderweise meldet mein Header-Checking-Skript gelegentlich große Mengen an Speicherverbrauch mindestens ein paar Mal pro Tag.
Das Skript läuft alle 5 Minuten, und das Speicherproblem tritt 5 oder 6 Mal am Tag auf - es scheint sich selbst zu lösen, aber ich möchte es davon abhalten, diese große Menge an Speicher gelegentlich für eine solche zu verwenden einfacher Job.
Die Warnung E-Mails für dieses einfache Skript Nutzung von rund 290MB berichten:
<?php
$message = "";
function array_find ($needle, $haystack, $search_keys = false) {
if (!is_array($haystack)) return false;
foreach ($haystack as $key => $value) {
$what = ($search_keys) ? $key : $value;
if (strpos($what, $needle) !== false) return $key;
}
return false;
}
$url = 'http://www.EXAMPLE.com/';
$haystack = get_headers($url);
$needle = "PHPSESSID";
if (!((array_find($needle, $haystack)) != '')) {
$message .= "No PHPSESSID in headers";
}
if (!(strpos($haystack[0], '200'))) {
$message .= "No 200 OK";
}
if ($message != '') {
mail("[email protected]", "Headers Changed", $message, "From: Example <[email protected]>");
}
exit;
?>
Der Server ist ein VPS CENTOS 5.8, Apache 2.2.16, PHP 5.3.3
Vielen Dank für jeden Lauf Hilfe.
Möchten Sie Ihren Code ein bisschen mehr lesbar mit Zeilenumbrüchen betrachten verfolgen zu machen? Ich bin sicher, dass eine Funktion nicht in einer einzigen Zeile ausgeführt werden muss. Es hilft wahrscheinlich bei Leuten, die sich die Zeit nehmen möchten, um Ihren Code anzusehen. – Nanne
'if (! ((Array_find ($ nadel, $ haystack))! = '')) {'? "Ja wirklich?" Warum nicht nur 'if (array_find ($ nadel, $ haystack) === FALSCH)'? – DaveRandom