سؤال

هل يمكن لأحد أن يقول لي كيفية تنفيذ ملف .bat من برنامج PHP النصي؟

لقد حاولت:

exec("C:\[path to file]");
system("C:\[path to file]");

لا شيء يعمل.لقد قمت بمراجعة أدلة PHP وبحثت في Google ولكن لم أجد إجابة جيدة.هل يعرف أحد أين أخطئ؟

أنا أستخدم Windows 2003 Server وقد نجحت في تشغيل ملف .bat يدويًا وهو يفعل ما أحتاج إليه؛أنا فقط بحاجة إلى أن أكون قادرًا على تشغيله برمجيًا.

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

المحلول

وقد تحتاج لتشغيله عبر cmd، على سبيل المثال:

system("cmd /c C:[path to file]");

نصائح أخرى

<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>

عندما تستخدم exec() الوظيفة، كما لو كان لديك cmd المحطة مفتوحة وكتابة الأوامر مباشرة إليها.

استخدم علامات الاقتباس المفردة مثل هذا $str = exec('start /B Path\to\batch.bat');
ال /B يعني سيتم تنفيذ الخفافيش في الخلفية وبالتالي فإن بقية بي أتش بي سيستمر بعد تشغيل هذا الخط، بدلاً من $str = exec('start /B /C command', $result); أين command يتم تنفيذه وبعد ذلك result يتم تخزينها لاستخدامها لاحقا.

ملاحظة: وهو يعمل لكل من نظامي التشغيل Windows و Linux.
مزيد من التفاصيل هنا http://www.php.net/manual/en/function.exec.php :)

<?php
 pclose(popen("start /B test.bat", "r")); die();
?> 

وعلى نافذتي آلة 8 آلة تشغيل IIS 8 لا أستطيع تشغيل الملف الدفعي فقط عن طريق وضع اسم الخفافيش وforgettig الطريق إلى ذلك. أو من خلال وضع الخفافيش في c: \ windows \ SYSTEM32 لا تسألني كيف يعمل ولكنه لا يفعل. LOL

و$ اختبار = shell_exec ( "C: \ WINDOWS \ SYSTEM32 \ CMD.EXE / ج $ streamnumX.bat")؛

هذا المقتطف من كود العمل.

يمكنك تشغيل ملف الخفافيش ليس فقط من واجهة المستخدم الرسومية لنظام التشغيل Windows أو برنامج جدولة المهام، ولكن مباشرةً من برنامج PHP النصي عندما تحتاج إليه.ولكن في معظم الحالات، سيتم تنفيذه لمدة 30-60 ثانية.اعتمادًا على تكوين PHP الخاص بك.إذا كانت المهمة في ملف BAT طويلة ولا تريد تجميد نصوص PHP الخاصة بك، فستحتاج إلى تفرع مهمة BAT كعملية أخرى باستخدام php.exe ولا يمكن الاعتماد عليها من أباتشي.

هذا يعمل في خلفية الوضع في نظام التشغيل Windows، يُنظر إليه على أنه عمليات منفصلة cmd.exe و php.exe من مدير المهام لا يوقف البرامج النصية الخاصة بـ Apache PHP.قد يتم تخزين الرسائل التي ينتجها البرنامج النصي الخاص بك واسترجاعها مرة أخرى عبر ملفات السجل.

في حالتي في file_scanner.php أقوم ببعض العمليات الحسابية الثقيلة في حلقة لمجموعة كبيرة من الملفات التي قد تستمر لبضع ساعات باستخدام وظيفة php sleep() عدم التحميل الزائد على وحدة المعالجة المركزية.

مؤشر النجاح نتيجة من الملف $r والتي يمكنك الاستعلام عنها عبر اياكس إذا كنت تريد معرفة النجاح أو البداية الخاطئة.في حالتي file_scanner.php يكتب ملف السجل مع الرسائل somefile.jpg - OK والتي يمكنك تحميلها إلى واجهة المستخدم الخاصة بك باستخدام AJAX كل بضع ثوانٍ لإظهار التقدم.

بي أتش بي

/**
 * Runs bat file in background mode
 *
 */
 function run_scanner() {

    $c='start /b D:\Web\example.com\tasks\file_scanner.bat'; 
    $r=pclose(popen($c, 'r')); 
    return json_encode(array('result'=>$r));

 }

مضرب

@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top