سایت خود را بسازید ، به روش saalek110

saalek110

Well-Known Member
صفحه ۳۴:

ساخت فایل منیجر:

فکر کنم قبلا هم در مورد ساخت فایل منیجر صحبت کرده بودم.

فایده فایل منیجر:
اگر فایل منیجر داشته باشیم ، وابستگی ما به فایل منیجر هاست کمتر می شود.

وظیفه فایل منیجر:
کار فایل منیجر ، لیست کردن فایل ها و پوشه ها.
و نشان دادن عکس ها و کدها است. و ویرایش کدهاست.
 

saalek110

Well-Known Member
امنیت:
اول اینکه با سسیون ، اجازه ورود دیگرانک را به این فایل ندهید. سسیون مدیر نیاز باشد برای ورود.
دوم فایل فایل منجر را در ریشه قرار ندهید و در عمق پوشه ها قرار دهید و آدرس پایه مثلا این طوری میشه:

PHP:
./../../
 

saalek110

Well-Known Member
کد پایه:
PHP:
$my_dir="./";
$scan = scandir($my_dir);

در کد بالا مسیر تعین شده و مسیر اسکن شده.

اگر مثلا بنویسید:
PHP:
print_r($scan);

می بینید که کل فایل ها و پوشه ها در متغیری که ساختیم و نامش اسکن بود ،هست.
 

saalek110

Well-Known Member
چطور پوشه ها را لیست کنیم؟

PHP:
$my_dir="./";
$scan = scandir($my_dir);
foreach ($scan as $f)
              if ($f !== '.' and $f !== '..')
{
                        if (is_dir ($f)  )
{
               echo "$f<br>";
}
}

چطور فایل ها را لیست کنیم؟

PHP:
$my_dir="./";
$scan = scandir($my_dir);
foreach ($scan as $f)
              if ($f !== '.' and $f !== '..')
{
           if (is_file ($f)  )
{
               echo "$f<br>";
}
}

پس با زیر هم قرار دادن کدهای بالا ، پوشه ها و فایل ها لیست میشه. ولی دو خط اول کد دوم را بردارید. چون نیاز نیست دو بار اسکن کنیم.
 
آخرین ویرایش:

saalek110

Well-Known Member
خوب با کد پست قبل ، پوشه ها و فایل های مسیر مورد نظر خود را لیست کردیم و این فایل منیجر است دیگه. فایل منیجر یعنی مدیریت پوشه ها و فایل ها دیگه.

ولی اگر بخواهیم مسیر عوض بشه ، چه گار کنیم. مثلا داخل یکی از پوشه ها را می خواهیم لیست کنیم.
مثل هارد کامپیوتر که وقتی روی پوشه ای کلیک می کنیم ، می رویم داخل پوشه.

راههای زیادی برای این کار هست و خودتان می توانید یک راه را انتخاب کنید و بسازید.
شاید یک راه ساده این باشه که در یک کادر مسیر را وارد کنید و بخواهید اون مسیر اسکن بشه. مثل زمان dos که همه چیز تایپی بود. ولی تایپ مسیر سخت است.
 

saalek110

Well-Known Member
یافتن پوشه ها و فایلها با رگولار رکسپرژن:


کد زیر را نگاه کنید:

PHP:
$pattern = '/^[a-z0-9_-]{1,40}$/'; // folders
$check = preg_match($pattern,$f);
if ($check)
{
    echo $f;
    echo"<br>";
}

من برای پیدا کردن پوشه ها از رگولار اکسپرژن استفاده کردم. اون is_dir را یک جایی نتونستم استفاده کنم ، به جایش از رگولار اکسپرژن استفاده کردم.

کد زیر هم:


PHP:
$check = preg_match('/([a-z]+[0-9]*)\.jpe?g$/', $f, $match);

برای فایلهای jpeg و jpg مناسب است.
میشه برای فایلهای txt و php و html و png و gif و ...... هم ، با ایجاد تغییر روی الگوی بالا استفاده کرد.

در جایی که بخواهیم همه فایلها را لیست کنیم ، من اینو استفاده کردم:


PHP:
    $check = preg_match('/([a-z]+[0-9]*)\.([a-z]+)$/', $f, $match);

شرح رگولار اکسپرژن کد بالا:
میگه اولش ( محتوای پرانتز اول) حروف و اعداد باشه و منها و آندرلاین. حروف حداقل یکی موجود باشد، اون علامت بعلاوه اینو میگه. و عدد هم ، صفرتا ، تا هر چقدر دلش خواست ، اون ستاره اینو میگه.
و دومش (محوای پرانتز دومی ) ، حروفی باشد ، حداقل یک حرف. علامت بعلاوه یعنی حداقل یک عدد.
اون وسط هم ممیز نقطه معنی اش اینه یک نقطه وسط باشه.

می دونید در اسم فایل یک نقطه وسطشه و یک سری حروف این طرف نقطه و یک سری حروف اون طرف نقطه. در اسم فایل عدد و آندرلاین و منها هم مجاز است.
 
آخرین ویرایش:

saalek110

Well-Known Member
من فایل منیجر رصد کننده پوشه ها را ساختم.
در زیر اجزایش را میگم.


HTML:
<a href='your_file_name.php?folder=empty'>do empty</a>

کد بالا به خودش پاس میده ، برای folder مقدار empty را پاس می کنه.

PHP:
if (isset($_GET['folder'])  )
{
}

کد بالا ، نگه می کنی ببینه در آدرس ، مقدار folder مقدار داده شده یا نه.

PHP:
$my_dir="./";

پوشه پایه را تعیین کرده.

PHP:
    if ($_GET['folder']=="empty")
{
$_SESSION['step1']="empty";

کد بالا بحثش را در پست بعدی می کنم.
 

saalek110

Well-Known Member
من از سسیون برای ذخیره اسم پوشه ها استفاده کردم.
در کد آخر پست قبلی ، نگاه می کنه ببینه وقتی فایل به خودش مقدار empty را در متغیر folder پاس داده ، اومده سسیون step1 را برابر با empty قرار داده.
البته فعلا من چهار تا جایگاه گرفتم ، ادامه کد بالا میشه:
PHP:
$_SESSION['step2']="empty";
$_SESSION['step3']="empty";
$_SESSION['step4']="empty";
یعنی وقتی با زدن لینک do empty , نگاه کنید به اولین کد پست قبل ، یک لینک داریم که وقتی کلمه do empty را تاچ یا کلیک کنید ، فایل به خودش کلمه empty را پاس می دهد و باعث میشه ۴ جایگاه سسیون پر از کلمه empty شوند.

حالا این جایگاه ها یا حافظه ها که ۴ تا تعریف کردیم چیه؟
این ۴ تا حافظه به آدرس ریشه اضافه میشه تا برویم به عمق پوشه ها.
 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
if ($_SESSION["step1"]=="empty" || $_SESSION['step1']==NULL)
 $_SESSION["step1"]=$_GET['folder'];

else if ($_SESSION["step2"]=="empty" || $_SESSION['step2']==NULL)
 $_SESSION["step2"]=$_GET['folder'];

else if ($_SESSION["step3"]=="empty" || $_SESSION['step3']==NULL)
 $_SESSION["step3"]=$_GET['folder'];

حال وقتی یک چیزی پاس دادیم ، یعنی اسم یک پوشه را ، با کد بالا ، می رود داخل جایگاه ها.
اگر اولی خالی بود می رود در اولی ، اگر نه ، می رود به دومی ، و اگر دومی هم خالی نبود ، می رود به سومی ، و الی آخر...


کد بالا ، به شکل ابشاری حافظه های ما در سسیون را پر می کنه.

ولی باید کل کدهای بالا داخل یک شرط هایی باشد. مثلا اینکه متغیر folder پر باشد:
PHP:
if (isset($_GET['folder'])  )
و فکر کنم باید بگیم در متغیر folder ، مقدار empty هم نباشد. چون empty یعنی خالی. ولی منظور ما پر کردن حافظه های سسیون با اسم پوشه هاست.
 
آخرین ویرایش:

saalek110

Well-Known Member
نگاهی به شکل اجرا شده برنامه:

Screenshot_۲۰۲۴-۰۹-۱۸_۱۲۰۲۵۰.jpg

در شکل بالا ، لینک do empty را می بینید.
و حاصل اجرای کد print_r را هم می بینید. کد print_r را در پست های قبلی گذاشتم.
اون فلش آبی ، حاصل کد من با رگولار اکسپرژن است. می بینید با حاصل print_r همخوانی دارد.

قبلش جایی که اسم اون فایل جلوی فلش آبی هست، اسم پوشه ها بود که به شکل لینک بودند و اسم خوشان را ماس می دادند به همین فایل . و خاصلش رفتن دو اسم در جایگاه های اول و دوم است.
در عکس نگاه کنید به سسیون اول و سسیون دوم، اونها اسم پوشه هایی است که من کلیک کردم.
و نگاه کنید به آدرس $my_dir ....اولش ریشه بوده ، یعنی نقطه و ممیز بوده ، درعکس هست ، ولی بعدش دو تا اسم پوشه بهش اضافه شده. در مست قبلی کد اضافه کردن اسم پوشه ها به ریشه را میذارم.
 

saalek110

Well-Known Member
PHP:
if (isset($_SESSION['step1']))
if ($_SESSION['step1']!="empty")
$my_dir=$my_dir.$_SESSION['step1'];


if (isset($_SESSION['step2']))
if ($_SESSION['step2']!="empty")
$my_dir=$my_dir."/".$_SESSION['step2'];
در کد بالا ، افزودن اسم پوشه اول و افزودن اسم پوشه دوم را به روت می بینید.
در دومی یک ممیز هم اضافه شده. اولی ممیز نمی خواست.

سومی و چهارمی را شبیه دومی خودتان کپی کنید و بسازید.
 

saalek110

Well-Known Member
من اجزای این برنامه را در بالا گذاشتم و شرحش را هم دادم.
فکر کنم خودتان بتوانید بنویسید و مونتاژ کنید.
 

saalek110

Well-Known Member
جایگزین های سسیون برای ذخیره:

من از سسیون بدم می آید چه کار کنم؟
حالا شاید شما از سسیون خوشتان نیاید، اصلا مسئله ای نیست ، می توانید در ۴ تا فایل text اینها را ذخیره کنید یا در ۴ خانه دیتابیس اینها را ذخیره کنید ، یا شاید بتوانید در کوکی ذخیره کنید.

پس ۳ راه جایگزین ذخیره ، به جای سسیون را گفتم.
فایل و دیتابیس و کوکی.
 

saalek110

Well-Known Member
گام های بعدی:

نمایش عکسها

حالا که توانستید در میان پوشه ها و فایلها گردش کنید....

خوبه به جای اسم فایل عکس ، خود عکس را نشان دهید. کار سختی هم نیست. باید تگ img استفاده کنید و لینک بسازید.


PHP:
 $my_loci=$_SERVER['SERVER_NAME'];
کد بالا آدرس دومین را می دهد.

مثلا
saalek110.is-great.net
بعد این اسم پوشه ها را بزارید و اسم فایل را. اولش هم http:// را شاید لازم داشته باشه.

PHP:
            $dd1='http://'.$my_loci;
            $dd2=$dd1.'/esme_poshe/';





 echo " ".$result2[$x]." "."<a href=$dd3><img src=$dd3 alt='c1.jpg' width='190' height=auto></a>";

قبلا ، ماهها قبل ، این کار را کرده بودم. قطعاتی از کدهایش را در کد بالا گذاشتم ، شاید به کارتون بیاید.
ما اسم پوشه ها را در پست هایی بالایی این تاپیک در سسیون ذخیره کردیم. باید اسم اون پوشه ها بعد اسم ساب دومین یا دومین بیاید. هنوز این کار را نکردم. فعلا راهنمایی کردم و تکه کدهایی گذاشتم.
 

saalek110

Well-Known Member
گام های بعدی:

ادیت فایلهای php


شاید بشه یک ادیتور ساخت و فایلهای با پسوند php را درش ادیت کرد.
بعدا روی این کار تلاش می کنم.
 

saalek110

Well-Known Member
اگر خود فایل فایل منیجر شما داخل پوشه هایی باشد. مثلا داخل یک پوشه ، پوشه ای باشد و فایل فایل منیجر شما داخل پوشه دومی باشه ، آدرس روت را باید این طوری بنویسید. طبق عکس:

Screenshot_۲۰۲۴-۰۹-۱۸_۱۸۵۳۰۳.jpg

PHP:
$my_dir="./../../";

کدش را هم در کد بالا گذاشتم.

ولی بهتره اوایل فایل فایل-منیجر را در همان پوشه ریشه بگذارید باشه.
 
آخرین ویرایش:

saalek110

Well-Known Member
برای پیدا کردن و خوندن فایلهای php:

PHP:
 foreach ($scan as $f)
{
$check = preg_match('/([a-z]+[0-9]*)\.php$/', $f, $match);
 if ($check)  {  
     echo $f;
      echo"<br>";  
      $masir=$my_dir."/".$f;
      echo $masir;
$myfile = fopen("$masir", "r") or die("Unable to open file!");
$contents = fread($myfile, filesize($masir));//read file  
fclose($myfile);
}    // if check
}  // foreach

اون رگولار اکسپرژن همان طور که می بینید داخلش حروف ‌php را دارد و مخصوص پیدا کردن فایلهای با پسوند php است. تکه اولش را هم قبلا توضیح دادم ولی بازم میگم ، گفته باید حروف الفبا ، حداقل یکی به خاطر اون علامت بعلاوه ، و اعداد حداقل صفر تا ، بخاطر اون علامت ستاره ، داشته باشه و یک نقطه بعد این قسمت باشه ، بخاطر اون علامت ممیز ستاره.

کد خوندن فایل را از این سایت گرفتم:


در پست بعدی نمایش محتوای فایل خوانده شده را خواهیم داشت.
 
آخرین ویرایش:

saalek110

Well-Known Member
ادامه پست قبل:

در پست قبل محتوای یک فایل php را خواندیم ، حالا اون محتوا را داخل یک textarea نمایش می دهیم:
PHP:
?>
<center>
 <form id='myform' action="<?php echo $_SERVER['PHP_SELF']; ?>"  method = 'POST'>

   <textarea id="mytextarea"  form="myform" name="post_text" rows="20" cols="55">
    <?php  echo  htmlspecialchars($contents);  ?>
     </textarea><br><br>
 
                <input type="submit"  name='act' form='myform' value="Submit"  style=" font-size:40px; height:90px; width:150px">   </center>
<?php

من قبلش که اون htmlspecialchars را نگذاشته بودم جلوی contents$ کدها سرکشی می کردند و textarea را سوراخ می کردند ، می آمدند بیرون و روی همه صفحه پخش می شدند. به زبان علمی بخواهیم بگیم ای طوری میشه که اگر کاراکترهای خاص خنثی نشوند با کدهای دیگر تداخل دارند و اتفاقات غیرقابل انتظار رخ می دهد.

در فرم بالا ، فرم به خود صفحه پاس می دهد ، اگر بخواهید می توانید به صفحه دیگری لینک بدهید و کارهای لازم را اونجا انجام دهید.
 

saalek110

Well-Known Member
دیگر فایلها به جز فایلهای php:

من فایل با پسوند txt در هاستم ندارم. اگر شما نیاز دارد ، در رگولار اکسپرژن به جای php حروف txt را بنویسید.
البته در رگولار اکسپرژن میشه عبارت ((یا )) گذاشت ،
PHP:
|
یک خط عمودی است علامتش . و بعد گذاشتن یا ، یک عبارت رگولار اکسپرژن دیگر نوشت. چون من فکر می کنم خوندن فایل php و txt یکسان است و میشه با هم انجام داد.

ولی فایلهای عکس که مثل jpg ، ipeg و png و gif است را باید جدا انجام داد. عکسها را باید نمایش داد، یا دیلت کرد یا عکس دیگری در اون پوشه آپلود کرد.و از این جور کارها انجام می دهیم.
 

saalek110

Well-Known Member
بعد اینکه برای فایلهای php قسمت خواندن گذاشتم و در textarea نمایش دادم ، من اومدم و خط اول فرم را تغییر دادم و به یک فایل دیگر پاس دادم ، این طوری:

HTML:
 <form id='myform' action="file_name.php"  method = 'POST'>

ولی مشکلی که وجود دارد ، اینه که چون چندین فرم ایجاد شده در فایل ما...موقع ارسال به فایل دیگر ، محتوای مسیر و محتوای فایل آخر ارسال می شود.

پس شاید بهتر باشه به مشاهده کدها در فایل فایل-منیجر بسنده کنیم و فقط آدرس فایل را به فایل دوم پاس بدهیم تا خودش فایل را باز کند.

PHP:
 echo "<a href='file_name.php?masir=$masir'>".$f."</a>";
پس با کد بالا ، مسیر را به فایل بعدی می فرستیم تا خودش فایل را باز کند.

و در فایل بعدی این طوری مسیر را دریافت می کنیم:
HTML:
$masir=$_GET['masir'];

و کدهای خواندن فایل و کدهای فرم را که در پستهای قبل گذاشتیم را در این فایل درج کنید.
این کدها:

PHP:
$myfile = fopen("$masir", "r") or die("Unable to open file!");
$contents = fread($myfile, filesize($masir));//read file
fclose($myfile);
?>
<center>
 <form id='myform' action="target_file.php"  method = 'POST'>
    <textarea id="mytextarea"  form="myform" name="post_text" rows="50" cols="60">
        <?php  echo  htmlspecialchars($contents);  ?>
             </textarea><br><br>
     <?php
     echo'<input type="hidden" id="custId" name="its_name"  value='.$its_name.'>';
     ?>
              <input type="submit"  name='act' form='myform' value="Submit"  style=" font-size:40px; height:90px; width:150px">   </center>                                      
        <?php
در کد بالا ، یک قسمت برای ارسال محتوای مخفی هم هست که فعلا نام مشخصی ندارد. اگر خواستید استفاده کنید نامش را مشخص کنید.
فایل هدف هم باید اسمش مشخص شود. من نوشتم target_file .
ابعاد textarea را هم می توانید به دلخواه تعیین کنید.


ادامه بحث فایل منیجر در صفحه ۳۵
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا