• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
فرق چهار تابع مشابه
#1
سلام آیا کسی میدونه فرق این چهار تا با هم چیه ؟
exec - shell_exec - system - passthru
و سوال بعد این که چه جوری میشه با passthru یه ارایه رو فرستاد.
مثلا
کد پی‌اچ‌پی:
$shell =array(1,2,3,4,5,6,7,8);
passthru("php  /var/www/shell.php $shell"); 
حالا وقتی میخوام خروجی بگیرم (صفحه shell.php )
کد پی‌اچ‌پی:
$ar=$_SERVER['argv'];
var_dump($ar); 
خروجی این رو میده

نقل قول:array(2) { [0]=> string(54) "/var/www/shell.php" [1]=> string(5) "Array" }
  پاسخ
تشکر شده توسط :
#2
همشون command رو execute می کنن با این تفاوت که:
exec خروجی نداره و خروجیش توسط شما تعیین میشه
shel_exec کل خروجی رو نمایش میده
system آخرین نتیجه از خروجی رو نمایش میده
passthru مهم نیست Big Grin نمی دونم

البته اینا در سیستم عامل های مختلف نتیجشو کمی متفاوته
وبلاگ: Yousha.Blog.ir


 کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بالاتر => نگهداری بهتر

  پاسخ
تشکر شده توسط : Reza ali786 masoudmanson shgninc
#3
تازه با echo هم میشه کامند اجرا کرد
  پاسخ
تشکر شده توسط :
#4
در رفرنس درمورد passthru میگه: این تابع باید وقتی که خروجی فرمان یونیکس دیتای باینری است که نیاز است تا مستقیما به مرورگر ارسال شود، بجای exec یا system استفاده شود.

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

پس ظاهرا اختلاف درمورد این تخلیهء خودکار بافر هست.
حالا اینکه اشکال احتمالی تخلیهء بافر درمورد دیتای باینری چیه خودتون فکر کنید و چیزی بنظرتون رسید بگید.

shell_exec فرمان رو اجرا میکنه و خروجی رو برمیگردونه.
فقط یک پارامتر ساده فرمان میگیره و دیگر هیچ.

اما exec مفصل تر هست و کارهای بیشتری میکنه درصورت لزوم.
بطور مثال اگر آرگومان خروجی output رو بهش بدید که باید یک متغییر از نوع آرایه باشه، هر خط از خروجی رو بعنوان یک عنصر در این آرایه قرار میده. اگر پارامتر خروجی return_var تعیین شده باشه، مقدار برگشتی فرمان مورد نظر در خط فرمان که یک عدد هست و بهش Status code گفته میشه رو در این متغییر ذخیره میکنه. این تابع آخرین خط خروجی رو برگشت میده.

تازه تابع pcntl_exec رو از قلم انداختی.
این تابع برنامهء اجرا شده رو بجای خود پراسس جاری جایگزین میکنه. یعنی دیگه کلا اجرای برنامهء PHP جاری خاتمه پیدا میکنه و اون برنامه بجاش اجرا میشه. البته برنامه ای که اجرا میشه دقیقا مشخصات و محیط اجرای PHP رو به ارث میبره. یعنی مثلا PID اون و دسترسی هاش و یکسری خصوصیات دیگر مربوط به هر پراسس.

نقل قول:تازه با echo هم میشه کامند اجرا کرد
چطوری؟
  پاسخ
تشکر شده توسط : admin scooter
#5
گاف دادم یک چیزی گفتم Confused
  پاسخ
تشکر شده توسط : Y.P.Y hidensoft
#6
با سلام و تشکر خدمت همه دوستان و اساتید عزیز
سوال من ارتباطی با این سوال نداره ولی میپرسم.
من میخوام یه فایل php را در پس زمینه اجرا کنم که همیشه در حال اجرا باشه و هیچ وقت متوقف نشه. من با دستور زیر این کارو انجام دادم ولی مشکلم اینکه هر شب بین ساعت 1 تا 2 این فایل خود به خود متوقف میشه و کار نمیکنه و من باید دوباره اون رو اجرا کنم.
قبل ساعت 1 توی لیست proccess هست ولی بعد از اون kill میشه و دیگه کار نمیکنه. من میخوام که این اتفاق نیوفته و این فایل همیشه در حال اجرا باشه ممنون میشم یه کمکی بکنید.
کد پی‌اچ‌پی:
exec("nohup php alarm.php >/dev/null 2> /dev/null & echo $!"
  پاسخ
تشکر شده توسط :
#7
در حمایت از صالح : با echo هم می شه شل اجرا کرد

کد پی‌اچ‌پی:
echo exec('ls -l ~'); 
  پاسخ
تشکر شده توسط : shgninc


پرش به انجمن:


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