سؤال

وأواجه مشكلة صغيرة مع ما يلي:

وعندما تنفيذ هذا السطر:

echo exec(createDir($somevariable));

وأحصل على هذا الخطأ:

Warning: exec() [function.exec]: Cannot execute a blank command in /home/mydir/myfile.inc.php on line 32

وأي أفكار.

وشكرا.

هل كانت مفيدة؟

المحلول

exec() تتوقع وسيطة سلسلة، وهو ما من شأنه أن تمر على لنظام التشغيل الخاص بك ليتم تنفيذها. وبعبارة أخرى، وهذا هو المدخل إلى سطر الأوامر الموجودة على الخادم.

ولست متأكدا ما createDir() وظيفة هو، ولكن ما لم انها تعود سلسلة سطر الأوامر صالحة، انه سيكون على الارجح بالفشل بسبب ذلك.

في لينكس، قد تريد أن تفعل شيئا من هذا القبيل

exec('/usr/bin/mkdir '.$path);

... من ناحية أخرى، يجب الامتناع عن استخدام exec() في جميع التكاليف. ما يمكنك القيام به هنا، بدلا من ذلك، هو أن نلقي نظرة على mkdir()

نصائح أخرى

إكسيك الذي يمكن تنفيذ نظام يدعو مثل لو كنت باستخدام سطر الأوامر. أنها لم تفعل أي شيء مع تنفيذ وظائف PHP.

لإنشاء الدليل الذي يمكن القيام بما يلي:

exec( 'mkdir [NAME OF DIRECTORY]' );

وكنت أعتقد أن وظيفة createDir() الخاص بك لا يرجع أي شيء. ويمكن أيضا أن يكون تستحق التدقيق أن $somevariable ومن المقرر أيضا إلى شيء معقول

أنت سوء فهم الغرض من إكسيك (). إذا كان كل ما تريد القيام به هو إنشاء دليل ثم يجب عليك استخدام مكدير ().

واعتقد انني المستمدة من وظائف أخرى والتعليقات ما هو عليه كنت فعلا تريد أن تفعل:

وأعتقد createDir() هي وظيفة PHP قمت بكتابته بنفسك. وهو يفعل أكثر من مجرد جعل دليل - فإنه بملء فيه، وأنه قد يستغرق بعض الوقت

لسبب ما كنت تعتقد أن الأمر التالي يحصل على تشغيل قبل انتهاء createDir() العمل، وكنت تعتقد أن من خلال التذرع createDir() باستخدام exec() هل يمكن تجنب هذا.

وقل لي في تعليق إذا كان هذا هو السبيل للخروج، وأنا حذف هذه الإجابة.

وانها يبدو من غير المحتمل أن createDir() حقا لا نستمر في العمل بعد لقد عاد (إذا فعلت ذلك، ثم ندعو أن 'غير المتزامن). فإن ذلك يتطلب مبرمج على الخروج من طريقهم لجعله غير المتزامن. حتى تحقق هذا الافتراض.

وعلى الرغم من ذلك، exec() ليس لاستدعاء وظائف PHP. هو الحال بالنسبة لاستدعاء الأوامر قذيفة (هذا النوع من الشيء الذي اكتب في موجه الأوامر). كما الكثير منا قد لاحظ، هو أن تجنبها إلا إذا كنت حذرا جدا - خطر يجري التي تسمح للمستخدم لتنفيذ الأوامر قذيفة عشوائية

إذا كنت حقا لا تضطر إلى الانتظار لوظيفة غير متزامن لإكمال، هناك عدة طرق يمكن القيام بذلك.

والطريقة الأولى تتطلب وظيفة غير متزامن قد كتب بطريقة قابلة. بعض واجهات برمجة التطبيقات تتيح لك البدء بعمل غير متزامن، والتي سوف اعطيكم "مقبض"، ثم القيام ببعض الأشياء الأخرى، ثم الحصول على حالة العودة من المقبض. شيء من هذا القبيل:

handle = doThreadedJob(myParam);
# do other stuff
results = getResults(handle);

وgetResults سينتظر حتى الانتهاء من العمل.

والطريقة الثانية ليست جيدة، ويمكن استخدامها عندما API هو أقل مفيدة. لسوء الحظ، انها مسألة العثور على نحو فكرة أن العمل انتهى، والاقتراع حتى هو.

while( checkJobIsDone() == false ) {
    sleep(some time interval);
}

وانا التخمين createDir () لايوجد قيمة الإرجاع.

وحاول exec("mkdir $somevariable");

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top