הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   אלוהים ישמור (https://hosts.co.il/forums/showthread.php?t=82656)

OrPol 18-05-10 00:17

אלוהים ישמור
 
אני שולח בPOST את הפרמטרים הבאים: phones, addzero וhomepage.
PHP קוד:

$userdata $_POST['userdata'] ;



$count 0;
$a explode("\n"$userdata[phones], count(explode("\n"$userdata[phones])));
while(
$a){
$num $userdata[addzero] . $a;
    if(
$count == 0){
    
$sql "INSERT INTO users(username, homepage) VALUES ('{$num}', '{$userdata[homepage]}')";
    }else{
    
$sql .= " ,('{$num}', '{$userdata[homepage]}')";
    }
$count++;
}
$sql .=";"

למה אני מקבל את זה?
Fatal error: Allowed memory size of 94371840 bytes exhausted (tried to allocate 94109660 bytes) in /home/polaczek/smsindex.controlpanels.co.il/cp/insert_list.php on line 28

(שורה 28 היא $sql .= " ,('{$num}', '{$userdata[homepage]}')";)
נ.ב׳. גם בלי ה׳count ובעוד 40 אופציות אחרות יש בעיה. לפעמים הוא מכניס אינסוף שורות ריקות למסד

תודה מראש!

AlmogBaku 18-05-10 01:02

לא הבנתי שום דבר ממה ששאלת, מהריקווסטים שביצעת או מהקוד שלך.
אל תתקמצן עלינו בפירוט ובחתך קוד

יונתן 18-05-10 01:14

נסה להגדיל את נפח הזכרון (ברירת מחדל 8)

קוד:

ini_set("memory_limit","91M");

Erez | TrustMedia.co.il 18-05-10 08:33

אולי נוצרת פה לולאה אינסופית,תבדוק אם הלולאה נגמרת מתישהו,ואם היא לא נגמרת אז למה(וממתי עושים while על ערך מexplode,אף פעם לא ראיתי דבר כזה :|)

OrPol 18-05-10 08:36

ציטוט:

נכתב במקור על ידי WiPi (פרסם 764503)
אולי נוצרת פה לולאה אינסופית,תבדוק אם הלולאה נגמרת מתישהו,ואם היא לא נגמרת אז למה(וממתי עושים while על ערך מexplode,אף פעם לא ראיתי דבר כזה :|)

EXPLOAD מחזיר מערך,
WHILE עוברת על כל המערך :)

וכן נוצרת פה לולאה אינסופית, השאלה היא למה (כשאני מפעיל את הקובץ ונותן לו מספיק זמן הוא מכניס 140,000 ערכים למסד, כאשר בUSERNAME קוראים לו Array0 :O).

אולי אני אחליף \n ל| ואעשה אקספלוד ל| :P

Erez | TrustMedia.co.il 18-05-10 08:43

אם אתה רוצה לעבור על מערך אז תשתמש בforeach

OrPol 18-05-10 08:48

ציטוט:

נכתב במקור על ידי WiPi (פרסם 764506)
אם אתה רוצה לעבור על מערך אז תשתמש בforeach

נכון :P
אבל למען הסר ספק, בעקרון? גם WHILE עובדת (אני משתמש בה כשאני מוציא FETCH ARRAY ממסד).

Erez | TrustMedia.co.il 18-05-10 08:52

ציטוט:

נכתב במקור על ידי Or Polaczek (פרסם 764507)
נכון :P
אבל למען הסר ספק, בעקרון? גם WHILE עובדת (אני משתמש בה כשאני מוציא FETCH ARRAY ממסד).

כשאתה עושה fetch מהמסד אתה לא מקבל מערך,כשאתה קורא לפונקציה היא מחזירה לך מערך של השורה הראשונה,ואז הוא כל פעם קורא מחדש לפונקציה שמחזירה לך כל פעם עוד שורה מהמסד עד שבסוף כשאין שורות אז זה מחזיר "שקר",ככה שאין פה מערך אחד גדול אלא כל פעם מערך חדש,מקווה שהבנת |קורץ|

OrPol 18-05-10 09:05

ציטוט:

נכתב במקור על ידי WiPi (פרסם 764509)
כשאתה עושה fetch מהמסד אתה לא מקבל מערך,כשאתה קורא לפונקציה היא מחזירה לך מערך של השורה הראשונה,ואז הוא כל פעם קורא מחדש לפונקציה שמחזירה לך כל פעם עוד שורה מהמסד עד שבסוף כשאין שורות אז זה מחזיר "שקר",ככה שאין פה מערך אחד גדול אלא כל פעם מערך חדש,מקווה שהבנת |קורץ|

טיינקס בנאדם, בכ"מ הFOREACH לא עוזר, אולי אני לא משתמש בו נכון?
אני עובד עכשיו על קובץ טסט.
PHP קוד:

$file "test.txt";
$handle = @fopen($file"r");
if (
$handle) {
    while (!
feof($handle)) {
        
$buffer fgets($handlefilesize($file));
        
$buffer str_replace("\n"""$buffer);
        echo 
$buffer "|";
        
$bigbuffer .= $buffer;
    }
    
fclose($handle);
}
echo 
"<br/><br/>";
$a=explode("|" $bigbuffer);
foreach(
$a as $b){
print 
" ,('{$b}', '7')";


במקור (TEST.TXT) יש את התוכן הבא:
523022969
505550772
598725674

החלק העליון עם הFOPEN עובד, הוא מחזיר לי שורה ארוכה עם מספרים כש| מפריד ביניהם.
כשאני לוקח את זה לEXPLODE ולFOREACH, הוא מחזיר לי את הPRINT שיש בתוך הFOREACH,
אבל במקום להחזיר לי אותו כל פעם עם מספר שונה,
יענו
,('523022969', '7'), ("505550772', '7')
וכו',

הוא מחזיר לי ב$b את כל המספרים מהEXPLODE ברצף.

יענו ,('523022969505550772', '7',)
וכו'...


כיוון?

Erez | TrustMedia.co.il 18-05-10 09:23

while($a as $b){
חח שכחת להחליף את הwhile בforeach


כל הזמנים הם GMT +2. הזמן כעת הוא 06:11.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ