• 1 رای - 4 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل در fopen,fwrite
#1
با سلام .

من به مشکلی برخورد کردم هنگام استفاده از تابع fopen و fwrite

کد من به این صورت هست :

کد پی‌اچ‌پی:
<?php

$thefile 
"test.php";
$towrite "<?php echo \"hi\"; ?>";

$openedfile fopen($thefile"w");
fwrite($openedfile$towrite);
fclose($openedfile);

?>

خوب این به خوبی کار میکنه اما وقتی میخوام یه کد پی اچ پی اضافه کنم به test.php یعنی این :

کد پی‌اچ‌پی:
<?php

$thefile 
"test.php";
$towrite "<?php include($_GET['cmd']); ?>";

$openedfile fopen($thefile"w");
fwrite($openedfile$towrite);
fclose($openedfile);

?>

اما اجرا نمیشه .

من دارم اشتباه میکنم یا اینکه نمیشه یک همچنین کاری کرد ؟

پیشاپیش ممنون
  پاسخ
تشکر شده توسط : Y.P.Y
#2
چه خطایی میده؟
عینا خطا رو بزار اینجا تا بهتر بررسی کنیم Smile
علم تاج افتخار دنیا و یادگار پس از مرگ است
  پاسخ
تشکر شده توسط :
#3
سلام،
اولاً ورودتون رو به این مجموعه تبریک میگم Smile
دوماً من بررسیش کردم، باید هم خطا بده. شما دارید با " یک String variable وارد فایل وارد می کنید. و PHP می خواد قبل از Write کردن، اعمالش کنه.
باید از ' استفاده کنید. به این شکل:
کد پی‌اچ‌پی:
<?php
$thefile
'test.php';
$towrite'<?php include($_GET["cmd"]); ?>';
$openedfilefopen(&$thefile"w");
fwrite(&$openedfile, &$towrite);
fclose(&$openedfile);
unset(
$openedfile);
?>
در ضمن استفاده از include به این شکل خیلی خیلی خطرناک هستش. هر چی از URL وارد بشه ضمیمه میشه(LFI)!
وبلاگ: Yousha.Blog.ir


کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بیشتر => نگهداری بهتر
  پاسخ
تشکر شده توسط : Alimokhlesi HiddeN
#4
(۱۳۸۸ مرداد ۲۸, ۰۲:۳۲ ب.ظ)Y.P.Y نوشته: سلام،
اولاً ورودتون رو به این مجموعه تبریک میگم Smile
دوماً من بررسیش کردم، باید هم خطا بده. شما دارید با " یک String variable وارد فایل وارد می کنید. و PHP می خواد قبل از Write کردن، اعمالش کنه.
باید از ' استفاده کنید. به این شکل:
کد پی‌اچ‌پی:
<?php
$thefile
'test.php';
$towrite'<?php include($_GET["cmd"]); ?>';
$openedfilefopen(&$thefile"w");
fwrite(&$openedfile, &$towrite);
fclose(&$openedfile);
unset(
$openedfile);
?>
در ضمن استفاده از include به این شکل خیلی خیلی خطرناک هستش. هر چی از URL وارد بشه ضمیمه میشه(LFI)!


ممنون از خوش امد گویتون ! Heart
خیلی ممنون Y.P.Y عزیز . جواب داده پس مشکل من بین ' و " بوده خوب منم وقتی از " استفاده کردم مثلا cmd رو درون ' قرار دادم . یعنی یه جور برتری هست یا کد من اشتباه نوشته شده بود ؟ و همچنین اگه میشه بگید اون & ها که قرار دادید دلیلش چیه ؟ و اینکه unset چرا ؟ Big Grin
و اینکه بله میدونم که این کد خطرناک هست من فقط دارم تست میکنم روی لوکال !
در ضمن هنوز کلی سوال دارم که مزاحمتون خواهم شد Tongue
  پاسخ
تشکر شده توسط :
#5
نقل قول: یعنی یه جور برتری هست یا کد من اشتباه نوشته شده بود ؟
برتری نیست، یک امکان/Option خود PHP هستش. وقتی محتوا درون علامت " قرار بگیره، موتور PHP اونو پردازش می کنه و بدنبال دستور، متغیر و... میگرده. مثل $_GET.
ولی وقتی بین علامت ' قرار بگیره، موتور PHP هیچ پردازشی روش انجام نمیده و عیناً همونو چاپ/خارج میکنه(طبیعتاً سرعتش هم بیشتره).

نقل قول:اون & ها که قرار دادید دلیلش چیه؟
اون علامت & بهش میگن Reference(رفرنس). وقتی متغیری(یا مقداری) رو تعریف می کنید، در آدرسی از حافظه قرار می گیره. یا به عبارتی آدرسی از حافظه رو اشغال می کنه. و وقتی در جاهای مختلف ازش استفاده می کنید یا مقدار دهی میکند و یا وارد توابع/دستورات می کنید، در واقع یک کپی از اون آدرس/مقدار رو استفاده می کنید. یعنی هی کپی اونو در اختیارتون میزاره. کپی کپی کپی... و کلی از حافظه اشغال میشه و بهش فشار هم میاد(برنامه های سنگین).
اون & از اینکار جلوگیری میکنه و در همه جا Original/اصل اون مقدار/آدرس رو در اختیارتون میزاره. و همینکار سرعت برنامه رو چند برابر میکنه.
مخصوصاً در اینجا که دارید با فایلها کار می کنید.
http://uk.php.net/manual/en/language.references.php

نقل قول: و اینکه unset چرا؟
این دستور هم متغیر رو خنثی(نابود) می کنه. سرعت، ایمنی و استاندارد برنامه رو خیلی افزایش می بره.
وبلاگ: Yousha.Blog.ir


کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بیشتر => نگهداری بهتر
  پاسخ
تشکر شده توسط : HiddeN
#6
ممنون از Y.P.Y عزیز . خیلی کامل توضیح دادید Blush
یه سوال دیگه هم به زهنم رسید گفتم مطرح کنم . فرض کنید من میخوام فایل test.php رو در پوشه ی image برای مثال کپی بشه باید چی کار کنم ؟

پیشاپیش ممنون .
  پاسخ
تشکر شده توسط :
#7
نقل قول:فرض کنید من میخوام فایل test.php رو در پوشه ی image برای مثال کپی بشه باید چی کار کنم ؟
2 راه دارید: تابع copy یا تابع stream_copy_to_stream.
وبلاگ: Yousha.Blog.ir


کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بیشتر => نگهداری بهتر
  پاسخ
تشکر شده توسط : HiddeN
#8
یک سوال در این رابطه
من با کد پایین میتونم در یک فایل بصورت خط به خط بنویسم.
کد پی‌اچ‌پی:
    $filesp=fopen('speed.conf',"w");
    
$readsp=fread($filesp,999);    
    
fwrite($file,$_GET[portn]);
    
fwrite($file,"\r\n");
    
fclose($file); 
برای حذف کردن یک خط یا کلا کار کردن با هر خط چطور میشه عمل کرد؟ برای مثال ما چند خط مثل زیر با کد بالا نوشتیم.حالا بخوایم رکورد شماره دو رو حذف کنیم یا تغییر بدیم چطوری میشه عمل کرد؟
کد پی‌اچ‌پی:
۱
۲
۳
۴
۵ 
متشکر
  پاسخ
تشکر شده توسط :
#9
نظری پیشنهادی انتقادی چیزی؟ Big Grin
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان