Hallo!
Ich habe folgendes Problem:
Ich lese aus einer Datenbank ca. 70k Kundendaten aus und füge sie in einen Magentoshop wieder ein. Wer sich ein bisschen mit Magento auskennt, wird die Schreibweise wiedererkennen:
Das Problem ist nur, dass $customer mit jedem Schleifendurchlauf größer wird und ich die Variable auf Grund von Beziehungen in beide Richtungen mit unset() nicht löschen kann.
Den Speicher erhöhen möchte bzw. kann ich nicht.
Was für alternativen habe ich?
Bereits nach dem 6000. Kunden ist der Speicher voll.
Einmal das ganze Skript
Ich habe folgendes Problem:
Ich lese aus einer Datenbank ca. 70k Kundendaten aus und füge sie in einen Magentoshop wieder ein. Wer sich ein bisschen mit Magento auskennt, wird die Schreibweise wiedererkennen:
PHP-Code:
$customer = Mage::getModel('customer/customer');
... Daten setzen
$customer->save();
Den Speicher erhöhen möchte bzw. kann ich nicht.
Was für alternativen habe ich?
Bereits nach dem 6000. Kunden ist der Speicher voll.
Einmal das ganze Skript
PHP-Code:
$result = mysql_query("
SELECT
customers_firstname, customers_lastname, customers_email_address,
customers_password, customers_newsletter
FROM
customers") or die(mysql_error());
//Magento vars
$storeId = Mage::app()->getStore()->getId();
$inserts = 100;
$i = 0;
$start = time();
$x = 0;
while ($row = mysql_fetch_assoc($result)) {
if ($x <301) {
if ($i < $inserts) {
$customer = Mage::getModel('customer/customer');
$customer->setFirstname($row['customers_firstname']);
$customer->setLastname($row['customers_lastname']);
$customer->setEmail($row['customers_email_address']);
//Password
$customer->setPasswordHash($row['customers_password']);
//Newsletter
$customer->setIsSubscribed($row['customers_newsletter']);
$customer->setStoreId($storeId);
$customer->setWebsiteId(1);
$customer->setGroupId(1);
$customer->setCreatedIn('Admin');
try {
//Ein paar ifs und das customer->save()
}
catch (Exception $e) {
//echo $e->getMessage() . "<br />";
}
}
else {
$i = 0;
$end = time()-$start;
echo "Zeit für " . $inserts . " Inserts: <strong>" . $end . "</strong> ";
echo "Memory: " . memory_get_usage() . "<br />";
$start = time();
}
$i++;
//print_r($customer);
echo memory_get_usage() ."-";
unset($customer); <= kein Effekt
echo memory_get_usage()."<br>";
set_time_limit(120);
flush();
}
Kommentar