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

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

Derey22 22-01-09 21:00

בדיקה אם קובץ הוא תקייה(בשרת)
 
אוקיי התחברתי לftp,
השגתי את רשימת הקקבצים בעזרתftp_nlist ,
היתי רוצה לדעת איך אפשר לבדוק אם קובץ X הוא תקייה.

תודה

Shon12 22-01-09 21:08

http://il2.php.net/is_dir מתכוון לזה?

Derey22 22-01-09 21:30

התחברתי לשרת ftp דרך php,לאחר התחברות הוצאתי את רשימת הקבצים.
שם אני רוצה לבדוק אם הקובץ הוא תקייה.(אני צריך רק תפונקציה).
is_dir לא ממש עוזרת לי(בגלל איטיות).

intercooler3819 22-01-09 21:41

תן var_dump() של זה ואני יכתוב לך איזה פונקציה

Derey22 22-01-09 21:44

ציטוט:

נכתב במקור על ידי nitsanbn (פרסם 694225)
תן var_dump() של זה ואני יכתוב לך איזה פונקציה

אני לא בטוח שאתה יכול,מפני שיכול להיות שיש תקיה בשם tal.jpg (זה חוקי).

sholaman 22-01-09 22:10

אתה עושה chdir ומנסה להיכנס לאותו שם של קובץ כאילו הוא תיקייה.
אם הCHDIR החזיר אמת וזה נכנס לבפנים ז"א שזה תיקייה, אם לא אז זה לא תיקייה.

עריכה:
PHP קוד:

function ftp_is_dir($dir$ftp_connect)
{
    if (
ftp_chdir($ftp_connect$dir))
    {
        
ftp_chdir($ftp_connect'../');
        return 
true;
    } 
    else
    {
        return 
false;
    }



Derey22 22-01-09 22:15

עשיתי משו דומה:
$file_is_dir="public_html/tal";
$contents = ftp_nlist($conn_id,$file_is_dir);
if ($file_is_dir == $contents[0])
{
echo "if file";
}else{
echo "is dir";
}

Shon12 22-01-09 23:13

עבדתי על זה איזה 5 דקות...רעיון נחמד:
HTML קוד:

<div id="shon" style="font-size: 11px; margin-bottom: 10px;">
        <?php
        $file = fopen("folder.jpg","w");
        ?>

</div>
<script>
        if (document.getElementById('shon').innerHTML.match("Permission"))
        {
        document.write("folder Not exists!");
        }

        else if (document.getElementById('shon').innerHTML.match("directory"))
        {
        document.write("<font color='red'>folder exists!</font>");
        }
</script>

בעצם מה שמוביל אותי לגלות אם זה אכן תיקייה או לא, זה השגיאות המוצגות לי.
הנה דוגמא קטנה: http://lasw.gamli.net/2.php
ויש לי תמונה בשם folder.jpg בשרת כמובן.

DvirCohen 22-01-09 23:19

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

Shon12 22-01-09 23:29

ציטוט:

נכתב במקור על ידי DvirCohen (פרסם 694266)
אך זה בדיוק בודק אם זה תיקיה או לא?
עד כמה שאני הבנתי זה פשוט מנסה לפתוח קובץ, בלי קשר לתיקיה

אם תשים לב עשיתי ל-fopen אפשרות כתיבה(w), לכן הוא כביכול מנסה לכתוב לתיקייה מה שלא אפשרי,ולקובץ כן אפשרי. לכן אם זו תיקייה הוא מן הסתם לא יצליח לכתוב ותיהיה שגיאה שונה, ואם יהיה קובץ הוא כן יצליח לפתוח אותו באפשרות כתיבה והשגיאה תיהיה שונה. וכמו שאמרתי - על פי השגיאות אני מזהה אם זו תיקייה או לא.

DvirCohen 22-01-09 23:39

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

Shon12 22-01-09 23:50

ציטוט:

נכתב במקור על ידי DvirCohen (פרסם 694269)
אתה מנסה לפתוח קובץ, אם הקובץ הזה לא קיים הוא יצור אותו, הפוונקציה הזאת תחזיר TRUE בכל מקרה, זאת ממש לא דרך לבדוק אם הקובץ הזה הוא תיקיה.
יש לזה פונקציות כמו is_dir שיעשו את העבודה.

הוא ציין שהוא לא רוצה להשתמש בפונקצייה is_dir.
בכל מקרה - לי הוא לא יוצר קובץ חדש. וגם אם הוא ייצור לאנשים אחרים, הם יוכלו להשתמש במקום ב-w ב-x (למרות שאני בטוח ב-99.9&#37; שזה לא יוצר לאף אחד).
מה שכן, הוא גם לא ציין שיווצר מצב שלא תיהיה לא תיקייה ולא קובץ כך שלא חשבתי לכיוון הזה בכלל.
וגם אם הוא יצטרך יש הרבה דרכים לעשות כך שלא ייצור.

עריכה:
http://www.decompile.com/cpp/faq/fopen_write_append.htm
ציטוט: "Create for writing. If a file by that name already exists, it will be overwritten."
כלומר זה מתייחס רק כשאתה משתמש ב-fread, אז הערך ישוכתב על הערך שקיים.
מה שאני לא השתמשתי.

בניה 23-01-09 01:37

אפשר לעשות משהו טיפה עקום.
להשתמש בפונקציה
http://il2.php.net/manual/en/function.ftp-rawlist.php

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


עוד משהו:
אם בודקים גודל תקייה עם
http://il2.php.net/manual/en/function.ftp-size.php
מקבלים -1 , יענו שגיאה.
אפשר לבדוק גם עם זה.

Derey22 23-01-09 07:06

תודה לכולם אפשל לנועל.

vadimg88 23-01-09 10:14

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

Derey22 23-01-09 18:07

הבעיה שאני כבר מחובר לftp,למה לי להתחבר שוב עם is_dir?

daMn 23-01-09 18:46

ציטוט:

נכתב במקור על ידי Derey22 (פרסם 694360)
הבעיה שאני כבר מחובר לftp,למה לי להתחבר שוב עם is_dir?

is_dir לא מתחבר לftp.
אם PHP יצרו את הפונקציה הזאת ואין לה פונקציה מקבילה זה אומר שיש טעם להשתמש בה.

Derey22 23-01-09 19:51

ציטוט:

נכתב במקור על ידי daMn (פרסם 694368)
is_dir לא מתחבר לftp.
אם PHP יצרו את הפונקציה הזאת ואין לה פונקציה מקבילה זה אומר שיש טעם להשתמש בה.

אז איך אני יכול לבדוק אם קיית תקיית X בשרת שלי בלי להתחבר לftp?

בניה 23-01-09 21:36

ציטוט:

נכתב במקור על ידי daMn (פרסם 694368)
is_dir לא מתחבר לftp.
אם PHP יצרו את הפונקציה הזאת ואין לה פונקציה מקבילה זה אומר שיש טעם להשתמש בה.

כשאתה רוצה לעבוד מול מערכת קבצים רגילה.
אבל פה הוא עובד מול FTP.

DvirCohen 24-01-09 01:56

אבל עד כמה שאני מבין, הוא התחבר לFTP מההתחלה בשביל לבדוק אם X הוא תיקיה.

בניה 24-01-09 08:23

ציטוט:

נכתב במקור על ידי DvirCohen (פרסם 694417)
אבל עד כמה שאני מבין, הוא התחבר לFTP מההתחלה בשביל לבדוק אם X הוא תיקיה.

בדיוק.
וIS_DIR לא משתמשת בחיבור הקיים לFTP.


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

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