PDA

View Full Version : اجرای یک برنامه با استفاده از تابع exec



m_basij
شنبه 05 شهریور 1390, 02:53 صبح
با سلام دوستان من یک برنامه دارم که تابع مینش چندین مقدار داره که باید مقداردهی بشه. از تابع exec استفاده می کنم و برنامه اجرا میشه و نتیجش رو درون متغیری تو php میریزم. حالا سوالم اینجاست که چجوری اون توابعی رو که در مین اون برنامه اجرایی دارم مقدار دهی کنم
برنامه اجراییم شبیه اینه
int main(int a , int b)

A B C D
شنبه 05 شهریور 1390, 12:20 عصر
این برنامه شما تحت سی(++) است؟
چون نوع پارامترهای تابع main سی اینطوری نیست.
بعدم شما پارامترها رو در خط فرمانی که اجرا میکنی به برنامه پاس میکنی و باید در داخل برنامه اون پارامترها رو بگیری و اگر تبدیلی چیزی لازمه (مثلا برای تبدیل از رشته به عدد) تبدیلشون کنی و بعد استفاده بشن.

amin1softco
شنبه 05 شهریور 1390, 15:27 عصر
int main(int argc, char** argv)

شکل اصلی تابع مین در سی به صورت کد بالاست و وقتی شما برنامه رو فراخوانی کنید بعد از اسم برنامه پارامترهایی که می نویسید در این دو متغیر قرار میگیره(اولی تعدادشون دومی مقدارشون) و می تونید مثلاً پارامتر ها رو با
argv[0]
در برنامتون دریافت کنید
و بعد به عدد تبدیل کنید و در a ,b بگزاریدشون.............

m_basij
شنبه 05 شهریور 1390, 21:37 عصر
ممنون راهنمایی بزرگی بود ولی یک سوالی پیش میاد که چجوری داخل تابع exec پارامتر ها رو ارسال کنم ، در پارامتر اول که اسم برنامه نوشته میشه و پارامتر دومم هم ماله خروجی اون برنامه هست حالا چجوری پارامتر ها را از داخل php به برنامه ارسال کنم؟ مشکل اصلی من سر این قضیه است.

A B C D
شنبه 05 شهریور 1390, 22:48 عصر
در پارامتر اول که اسم برنامه نوشته میشهدربارهء ماهیت پارامتر اول گفته command، یعنی فرمان.
فرمان معمولا به معنای اونچه هست که مثلا در خط فرمان شل تایپ میکنید، که علاوه بر مسیر و نام برنامه میتونه شامل آرگومان ها هم باشه (و حتی میتونه یک خط فرمان ترکیبی شامل اجرای چند برنامه/دستور باشه).
اگر یه نگاهی به رفرنس این تابع در سایت رسمی PHP (http://php.net/manual/en/function.exec.php) میکردید هم میتونستید در نمونه کدهایی که در بخش کامنت هاش اومده این قضیه رو مشاهده کنید.

یه مثال ساده هم در همینجا:

exec('test.exe arg1 arg2');

m_basij
شنبه 05 شهریور 1390, 22:52 عصر
دوست عزیز مشکل اینجاست که من بشکل زیر نوشتم باسه تست ولی چیزی رو برنمیگردونه
$a = exec('test dll.exe 2 3 5');
داخل سایت رسمی php رو اول نگاه کردم ولی چون چیزی متوجه نشدم پرسیدم

amin1softco
شنبه 05 شهریور 1390, 23:06 عصر
دوستمون درست اشاره کردند درهمون جا که اسم برنامه رو می نویسی یک اسپیس بزن و پارامتر ها رو وارد کن مثال :


<?php
$p='param';
exec ('c:\\test.exe '{$p}'');

?>

برای حل مشکل شما اول برید توی run کامپیوتر ببنید بدون پی اچ پی درست اجرا می شه یا نه ؟!

m_basij
شنبه 05 شهریور 1390, 23:26 عصر
ممنون ولی مشکلم هنوز پا برجاست یعنی تست کردم ولی جواب نداد. این سرس مثالیه که دارم روش کار می کنم. یک تستی هم خودتون بکنید شاید روی کامپیوتر من مشکل داره
این سرس زیربرنامم است
#include<iostream>
using namespace std;


void main(int argc, char** argv)
{
cout << "wellcome to iran a is = '" << argv[0] << "' and b is " ;
}
و این هم سرس php برناممم
$a = exec('test dll.exe {2 5}');
var_dump($a);
ممنون میشم یک تستی بکنید

A B C D
شنبه 05 شهریور 1390, 23:27 عصر
دوست عزیز مشکل اینجاست که من بشکل زیر نوشتم باسه تست ولی چیزی رو برنمیگردونه
$a = exec('test dll.exe 2 3 5');
داخل سایت رسمی php رو اول نگاه کردم ولی چون چیزی متوجه نشدم پرسیدم
اگر در مسیر یا نام برنامهء شما فاصله وجود داره اون رو داخل کوتیشن بذارید.
بطور مثال:

exec('"my prog.exe" arg1 arg2');
فکر کنم اینطوری درست بشه.

یه راه دیگه که شخصا توصیه میکنم اینه که فاصله رو از نام برنامه حذف کنید؛ میتونید بجای فاصله مثلا آندرلاین بذارید.

m_basij
شنبه 05 شهریور 1390, 23:44 عصر
ممنون خروجی داره الان ولی خروجی الان به شکل زیر شد. عجیبه چرا نام برنامه داخل ارگومان اول ریخته شده؟
"wellcome to iran a is = 'test dll.exe' and b is"

amin1softco
شنبه 05 شهریور 1390, 23:49 عصر
خوب درسته دیگه argv[0] آدرس برنامه است .


<?php
$p="param";
system("c:\\php.exe '$p' ");
?>


کد سی :

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
cout << "wellcome to iran a is = '" << argv[1] << "' and b is " ;
return 0;
}


فایل ضمیمه هم حاوی تست برنامه است.....

m_basij
شنبه 05 شهریور 1390, 23:54 عصر
ممنون . درست شد.
دستون درد نکنه