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

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

Art Watch 21-10-06 15:50

זיהוי סוג הקובץ - PHP
 
איך אני מזהה מה הסוג של הקובץ? נגיד aa.txt אז סוג הקובתץ הוא txt?

בPHP

תודה רבה!

RS324 21-10-06 16:08

ציטוט:

נכתב במקור על ידי Gil & Ido
איך אני מזהה מה הסוג של הקובץ? נגיד aa.txt אז סוג הקובתץ הוא txt?

בPHP

תודה רבה!


בעזרת הפונקציה filetype
או שפשוט אתה בודק מה הסיומת שאחרי הנקודה.

Art Watch 22-10-06 20:45

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

בכל אופן תודה רבה רבה! :).

HighA 22-10-06 21:39

עושה explode/explore חכתי איך כותבים (תחפש בפורום מדריכים) ולוקח את החלק השני (אחרי הנקודה)

Tomer 22-10-06 23:02

ציטוט:

נכתב במקור על ידי SsH S Scripts
עושה explode/explore חכתי איך כותבים (תחפש בפורום מדריכים) ולוקח את החלק השני (אחרי הנקודה)

ואם השם קובץ הוא yossi.noam.yoram.txt ?

אתה יכול להשתמש ב:
PHP קוד:

 $file "yossi.noam.yoram.txt"// שם הקובץ
$type explode(".",$file); // חלוקת הקובץ לפי מספר הנקודות
$count count($type);
echo 
$type[$count 1]; // return 'txt' 


RS324 22-10-06 23:16

ATOM קצת הסתבכת...למה לספור ואז להוציא את האחרון - 1 ?

הנה שיטה הרבה יותר טובה

PHP קוד:

$filetype array_pop(explode('.',$filename)); 

array_pop מחזירה לך את האיבר האחרון מהמערך....

meshuga 22-10-06 23:21

ציטוט:

נכתב במקור על ידי RS324
ATOM קצת הסתבכת...למה לספור ואז להוציא את האחרון - 1 ?

הנה שיטה הרבה יותר טובה

PHP קוד:

$filetype array_pop(explode('.',$filename)); 

array_pop מחזירה לך את האיבר האחרון מהמערך....

נחמד, אני משתמש ב
PHP קוד:

$ext=substr(strrchr($name"."), 1); 


RS324 22-10-06 23:25

ציטוט:

נכתב במקור על ידי meshuga
נחמד, אני משתמש ב
PHP קוד:

$ext=substr(strrchr($name"."), 1); 



והיא בטוח עובדת לך ? אחרי שבדקתי ככה ב REF (לא ניסיתי)

strrchr = strstr
עכשיו
STRSTR מחזירה לך את כל מה שנשאר אחרי הנקודה
לודגמא :
this.is.my.file.name.and.i.like.it.txt
עם STRSTR אתה תקבל :
is.my.file.name.and.i.like.it.txt
עכשיו עבור SUBSTR עם התחלה של 1 אתה אמור לקבל
s.my.file.name.and.i.like.it.txt

אבל אני לא בטוח , זה רק מהסתכלות ב REF אני יעשה בדיקה ויערוך

עריכה, עשיתי בדיקה ועבור STRCHR אתה מקבל .txt
כנראה שזה הולך מהסוף להתחלה...לא חשבתי על זה ככה...יפה.

meshuga 22-10-06 23:44

ציטוט:

נכתב במקור על ידי RS324
והיא בטוח עובדת לך ? אחרי שבדקתי ככה ב REF (לא ניסיתי)

strrchr = strstr
עכשיו
STRSTR מחזירה לך את כל מה שנשאר אחרי הנקודה
לודגמא :
this.is.my.file.name.and.i.like.it.txt
עם STRSTR אתה תקבל :
is.my.file.name.and.i.like.it.txt
עכשיו עבור SUBSTR עם התחלה של 1 אתה אמור לקבל
s.my.file.name.and.i.like.it.txt

אבל אני לא בטוח , זה רק מהסתכלות ב REF אני יעשה בדיקה ויערוך

עריכה, עשיתי בדיקה ועבור STRCHR אתה מקבל .txt
כנראה שזה הולך מהסוף להתחלה...לא חשבתי על זה ככה...יפה.

;) :P
זה לא עושה מהסוף להתחלה, זה עושה מהפעם האחרונה בסטרינג שנמצא התו המבוקש.
ההבדל בינו ל strstr שstrstr פועל מהראשון.
הsubstr זה רק בשביל להוריד את הנקודה.

RS324 22-10-06 23:57

ציטוט:

נכתב במקור על ידי meshuga
;) :P
זה לא עושה מהסוף להתחלה, זה עושה מהפעם האחרונה בסטרינג שנמצא התו המבוקש.
ההבדל בינו ל strstr שstrstr פועל מהראשון.
הsubstr זה רק בשביל להוריד את הנקודה.

הבילבול נוצר בגלל הדמיון תסתכל :

strchr -- Alias of strstr()

אבל כשיש פעמיים R
strrchr -- Find the last occurrence of a character in a string

מוצא את המופע האחרון של תו מסויים..

בגלל זה התבלבלתי בניהם

אני יעשה מבחן קטן ואני יגיד לך מה יותר יעיל.... הדרך שלי או הדרך שלך

Tomer 23-10-06 00:00

ציטוט:

נכתב במקור על ידי RS324
הבילבול נוצר בגלל הדמיון תסתכל :

strchr -- Alias of strstr()

אבל כשיש פעמיים R
strrchr -- Find the last occurrence of a character in a string

מוצא את המופע האחרון של תו מסויים..

בגלל זה התבלבלתי בניהם

אני יעשה מבחן קטן ואני יגיד לך מה יותר יעיל.... הדרך שלי או הדרך שלך

אם אני לא טועה strrchr מייצג string reverse char (מציג את הסטרינג אחורנית)..

RS324 23-10-06 00:15

אוקי אז ככה :

יצרתי 3 קבצים שונים :
שכל קובץ מכיל את הנתונים לפי מה שפרסמנו.

הקובץ שלי :

PHP קוד:

<?php

$filename 
"this.is.my.file.name.and.i.like.it.txt";

function 
rs324_way($filename)
{
    return 
array_pop(explode('.',$filename));  
}




$rs324_start microtime();

for (
$i 0$i <= 100000;$i++)
{
    
rs324_way($filename);
}
$rs324_end microtime();

echo 
"for 100,000 times rs324_way took ".($rs324_end $rs324_start)." seconds";
?>

הקובץ של ATOM-BOMB :

PHP קוד:

<?php

$filename 
"this.is.my.file.name.and.i.like.it.txt";

function 
atom_way($filename)
{
    
$type explode(".",$filename); // חלוקת הקובץ לפי מספר הנקודות
    
$count count($type);
    return  
$type[$count 1];
}


$atom_start microtime();

for (
$i 0$i <= 100000;$i++)
{
    
atom_way($filename);
}
$atom_end microtime();

echo 
"for 100,000 times atom_way took ".($atom_end $atom_start)." seconds";
?>

והקובץ של משוגע :

PHP קוד:

<?php

$filename 
"this.is.my.file.name.and.i.like.it.txt";

function 
meshuga_way($filename)
{
    return 
substr(strrchr($name"."), 1);  
}


$meshuga_start microtime();

for (
$i 0$i <= 100000;$i++)
{
    
meshuga_way($filename);
}
$meshuga_end microtime();

echo 
"for 100,000 times meshuga_way took ".($meshuga_end $meshuga_start)." seconds";
?>

עכשיו, המבחן הוא בדיקה של כמה זמן לוקח עבור 100 אלף פעמים שאותה פונקציה צריכה לרוץ.

והנה התוצאות :

שלי :
PHP קוד:

for 100,000 times rs324_way took 0.152966 seconds 

של ATOM :
PHP קוד:

for 100,000 times atom_way took 0.756723 seconds 

ועבורך משוגע...הדף פשוט הפסיק להגיב ולא נתן תוצאה |Rolleyes|

המסקנה הדרך שאני פרסמתי הכי יעילה
אחר כך של ATOM
ושל משוגע לא יעילה בכלל.

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

למרות שהמחשב שלי דיי אמין CENTRINO 1600 ליבה כפולה
וגיגה זיכרון....

meshuga 23-10-06 06:43

ציטוט:

נכתב במקור על ידי RS324
אוקי אז ככה :

יצרתי 3 קבצים שונים :
שכל קובץ מכיל את הנתונים לפי מה שפרסמנו.

הקובץ שלי :

PHP קוד:

<?php

$filename 
"this.is.my.file.name.and.i.like.it.txt";

function 
rs324_way($filename)
{
    return 
array_pop(explode('.',$filename));  
}




$rs324_start microtime();

for (
$i 0$i <= 100000;$i++)
{
    
rs324_way($filename);
}
$rs324_end microtime();

echo 
"for 100,000 times rs324_way took ".($rs324_end $rs324_start)." seconds";
?>

הקובץ של ATOM-BOMB :

PHP קוד:

<?php

$filename 
"this.is.my.file.name.and.i.like.it.txt";

function 
atom_way($filename)
{
    
$type explode(".",$filename); // חלוקת הקובץ לפי מספר הנקודות
    
$count count($type);
    return  
$type[$count 1];
}


$atom_start microtime();

for (
$i 0$i <= 100000;$i++)
{
    
atom_way($filename);
}
$atom_end microtime();

echo 
"for 100,000 times atom_way took ".($atom_end $atom_start)." seconds";
?>

והקובץ של משוגע :

PHP קוד:

<?php

$filename 
"this.is.my.file.name.and.i.like.it.txt";

function 
meshuga_way($filename)
{
    return 
substr(strrchr($name"."), 1);  
}


$meshuga_start microtime();

for (
$i 0$i <= 100000;$i++)
{
    
meshuga_way($filename);
}
$meshuga_end microtime();

echo 
"for 100,000 times meshuga_way took ".($meshuga_end $meshuga_start)." seconds";
?>

עכשיו, המבחן הוא בדיקה של כמה זמן לוקח עבור 100 אלף פעמים שאותה פונקציה צריכה לרוץ.

והנה התוצאות :

שלי :
PHP קוד:

for 100,000 times rs324_way took 0.152966 seconds 

של ATOM :
PHP קוד:

for 100,000 times atom_way took 0.756723 seconds 

ועבורך משוגע...הדף פשוט הפסיק להגיב ולא נתן תוצאה |Rolleyes|

המסקנה הדרך שאני פרסמתי הכי יעילה
אחר כך של ATOM
ושל משוגע לא יעילה בכלל.

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

למרות שהמחשב שלי דיי אמין CENTRINO 1600 ליבה כפולה
וגיגה זיכרון....

אחלה ;)...נשתמש במה שאתה הצעת..מהיום...תודה.


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

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