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

הוסטס - פורום אחסון האתרים הגדול בישראל (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

OrPol 18-05-10 09:26

ציטוט:

נכתב במקור על ידי WiPi (פרסם 764515)
while($a as $b){
חח שכחת להחליף את הwhile בforeach

העתקתי את הקוד לא נכון,
ניסיתי עם foreach הוא החזיר לי מה שאמרתי.

פשוט תחליף את הוויל ב׳foreach (בדקתי עם foreach בדוק)

עריכה:
והרי הפלט
523022969|505550772|523702390|

,('523022969505550772523702390', '7')

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

PHP קוד:

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

הבעיה הייתה שלמשתנה bigbuffer העברת את buffer בלי | בין הערכים,ורק הדפסת את buffer ככה

OrPol 18-05-10 09:43

ציטוט:

נכתב במקור על ידי WiPi (פרסם 764519)
PHP קוד:

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

הבעיה הייתה שלמשתנה bigbuffer העברת את buffer בלי | בין הערכים,ורק הדפסת את buffer ככה

:P כן, עליתי על זה.
אבל שורה תחתונה השגתי מה שרציתי גם ככה:
PHP קוד:

<?php
$file 
"test.txt";
$handle = @fopen($file"r");
$count 0;
$bigbuffer "INSERT INTO users(username, homepage) VALUES ";
if (
$handle) {
    while (!
feof($handle)) {
        
$buffer fgets($handlefilesize($file));
        
$buffer str_replace("\n"""$buffer);
            if(
$count == 0){
            
$buffer "('"$buffer "', '7')";
            }else{
            
$buffer " ,('"$buffer "', '7')";
            }
        
        
$bigbuffer .= $buffer;
        
$count++;
    }
    
fclose($handle);
}
$bigbuffer .= ";";
echo 
$bigbuffer;

?>

ארז, המון תודה :)
אתה כישרון מבוזבז לדעתי :P

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

ציטוט:

נכתב במקור על ידי Or Polaczek (פרסם 764520)
:P כן, עליתי על זה.
אבל שורה תחתונה השגתי מה שרציתי גם ככה:
PHP קוד:

<?php
$file 
"test.txt";
$handle = @fopen($file"r");
$count 0;
$bigbuffer "INSERT INTO users(username, homepage) VALUES ";
if (
$handle) {
    while (!
feof($handle)) {
        
$buffer fgets($handlefilesize($file));
        
$buffer str_replace("\n"""$buffer);
            if(
$count == 0){
            
$buffer "('"$buffer "', '7')";
            }else{
            
$buffer " ,('"$buffer "', '7')";
            }
        
        
$bigbuffer .= $buffer;
        
$count++;
    }
    
fclose($handle);
}
$bigbuffer .= ";";
echo 
$bigbuffer;

?>

ארז, המון תודה :)
אתה כישרון מבוזבז לדעתי :P

בבקשה,ולמה מבוזבז חח ?

RS324 18-05-10 11:19

הנה משהו שיכול לעזור לך לעשות את מה שרצית ביותר קלות

PHP קוד:

$lines file('file.txt',FILE_SKIP_EMPTY_LINES);
foreach(
$lines as $line)
{
    
// do stuff here
    
echo($line);
    



AlmogBaku 18-05-10 11:35

אגב-
PHP קוד:

$a explode("\n"$userdata[phones], count(explode("\n"$userdata[phones]))) 

זה מאוד מאוד דבילי מה שעשית עם הקאונט.. חח ספרת באמצעות עצמו?
והבעיה אכן בWHILE.. צריך לרוץ על זה עם foreach


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

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