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

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

dor77 01-02-11 17:06

יצירת תיקייה מחוץ ל www root וקריאה ממנה.
 
שלום.
אני רוצה להגן על תוכן של תיקייה בשרת. כלומר, אני אחליט למי לתת הורדה לקובץ שנמצא בתיקייה הזו.
נגיד אני רוצה שרק אם לשם משתמש קוראים admin אז הוא יקבל header כזה:

PHP קוד:

header('Content-type: application/mp3');
header('Content-Disposition: attachment; filename="'.$file_name.'"');
readfile($file_name_read); 

בניתי 2 קבצי php שאמורים לעזור.
ראשית, פתחתי תיקייהה מחוץ ל html_public בשם abc.
והנה הקודים:

זה הדף שקורא קבצים מתוך התיקייה.

PHP קוד:


<?php

פה תיהיה בדיקה
אם אתה אדמיןהתכנית תימשךאחרתאתה נשלח לדף הבית.


$dhandle opendir('/home/bla/abc');
$files = array();
if (
$dhandle) {
   while (
false !== ($fname readdir($dhandle))) {
      if ((
$fname != '.') && ($fname != '..') &&
          (
$fname != basename($_SERVER['PHP_SELF']))) {
          
// store the filename
          
$files[] = (is_dir"./$fname" )) ? "(Dir) {$fname}" $fname;
      }
   }
   
closedir($dhandle);
}

foreach( 
$files as $fname )
{
   echo 
'<a href="get_file.php?file='.$fname.'">'.$fname.'</a><br />';
}


?>

הנה הקוד שאחראי לתת לך הורדה של הקובץ:

PHP קוד:


<?php

$file_name
=$_GET['file'];
$file_name_read="files/".$file_name;
header('Content-type: application/mp3');
header('Content-Disposition: attachment; filename="'.$file_name.'"');
readfile($file_name_read);


?>

אבל משום מה, כאשר אני עושה "הצג מקור" בדף שנותן לי את ההורדה אני רואה כזה דבר:
<a href="get_file.php?file=dsd.htm">dsd.htm</a>

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

אני מיואש כבר.
תודה.

SniR-S 01-02-11 17:26

תיצור ID לכל קובץ שנמצא על התיקיה,
ואז תבדוק איזה ID נמצא בתוך המשתנה $_GET['file']
ולפי זה תדע איזה קובץ לשלוף ב HEADER

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

כי אז זה יצא get_file.php?file=12345
ועדיין תתבצע הורדה של הקובץ המתאים.

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

dor77 01-02-11 18:04

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

זה הקוד לפני הבעיה:


PHP קוד:

$file_name_read="files/".$file_name

עכשיו אני רוצה שבמקום files יהיה כתוב השם משתמש של אותו משתמש..הכנסתי את הערך שיש לו בעוגייה (עשיתי אבטחה לעוגיות) למשתנה בשם dir..הנה ניסיון:



PHP קוד:

$file_name_read=$dir/.$file_name


מה הבעיה בהצבת המשתנה?
תמיד אני נתקע בחלק הזה..

תודה :)

SniR-S 01-02-11 18:16

PHP קוד:

$file_name_read=$dir "/" $file_name


dor77 01-02-11 19:37

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

תודה רבה!!


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

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