Trong .NET Lớp Process chứa một số thuộc tính/phương thức hữu ích cho phép nhà phát triển truy cập vào thông tin tương đối của quy trình. Có phương pháp hoặc lớp học tương đương nào trong PHP không?Có tương đương với Quy trình của C#. Bắt đầu bằng PHP không?
Có phương pháp tương đương nào trong PHP như phương pháp C# "Process.Start()" không?
Trả lời
1.
Xem Program execution Functions
Ngoại trừ không có khái niệm về phương thức/lớp/thuộc tính/không gian tên trong các hàm chuẩn PHP. PHP về bản chất là một ngôn ngữ lập trình thủ tục với vài cấu trúc OOP và hỗ trợ không gian tên được thêm vào như một tính năng mới mới kể từ bản phát hành chính cuối cùng (5.3). Đó là một trong những lý do tại sao mọi người chỉ trích nó như một ngôn ngữ 'đồ chơi'. Bạn có thể truy cập tất cả các hàm dựng sẵn PHP mọi lúc, không có các không gian tên pesky để cản đường;), chỉ cần cẩn thận về các xung đột tên.
2.
@YSJaitawat Câu trả lời không đúng.
Nhấp vào liên kết này cho exec function documentation in the PHP manual.
Lưu ý: Ngoài ra, nếu bạn đang di chuyển từ C# sang PHP và tìm kiếm thông tin PHP manual có một số thông tin đáng ngạc nhiên bao gồm các nhận xét do người dùng gửi ở cuối mục nhập nơi mọi người thường đăng các trường hợp sử dụng hoặc tiện ích mở rộng việc sử dụng tiêu chuẩn. Đây có lẽ là ngôn ngữ dễ học nhất vì sự giàu có của thông tin được tìm thấy trong sách hướng dẫn.
Sau Đoạn mã nên làm tương tự như "Process.Start()"
$ 'quá trình thực thi' thực thi =; exec ($ thực thi);
thêm về kiểm soát quy trình và thực hiện có thể được tìm thấy tại http://php.net/manual/en/book.pcntl.php
Nếu bạn muốn truy cập vào stdin và stdout của quá trình tạo, bạn có thể sử dụng:
Câu trả lời của Evan Plaice bao gồm một số vấn đề cơ bản, tuy nhiên một phần lớn hệ thống POSIX hoàn toàn quản lý quy trình và giao tiếp - tất nhiên bạn không có trên nền tảng Unix/Linux thì tất cả chức năng này không có sẵn . Nếu đúng, hãy kiểm tra manual
Tuy nhiên, nó không cố gắng giải quyết chức năng do lớp quy trình .Net thực hiện - được gắn chặt với ý tưởng của Microsoft rằng chương trình là GUI. Để làm việc với các cửa sổ tương tác thì bạn phải xem xét các ràng buộc GTK hoặc MSWindows có sẵn như là các bu-lông.
+1 Điểm tốt. Tôi sẽ không giới hạn khả năng quản lý quy trình chỉ với POSIX. Có một số lượng đáng ngạc nhiên bạn có thể làm theo những dòng trong NET trên cửa sổ quá. Vấn đề là, PHP là rất hạn chế trong khía cạnh đó. Để làm bất cứ điều gì phức tạp hơn so với ưu tiên mở/đóng/thay đổi cơ bản, bạn phải thực thi các lệnh shell cơ bản và phân tích cú pháp stdout stdout của sdtin, đây có thể là một cơn đau cực đoan. Nó có khả năng, không dễ dàng. –
Bạn có thể sử dụng đối tượng COM nếu (như bài viết của bạn ngụ ý) bạn đang chạy trên Windows (Lưu ý rằng nó sẽ không hoạt động trên Linux, nhưng nó cung cấp cho bạn rất nhiều thứ mà bạn không thể làm).
$com = new COM('WScript.Shell');
$com->run('Path/To/Shell/Program', 0, false);
Lệnh chạy là detailed here.
Trong .NET Lớp Process chứa một số hữu ích thuộc tính/phương pháp mà cho phép các nhà phát triển để truy cập quá trình thông tin tương đối. Bạn có bất kỳ phương pháp hoặc lớp học tương đương nào trong PHP hay không.
Có thể bạn sẽ nhận được câu trả lời tốt hơn/tốt hơn nếu bạn chỉ định thuộc tính/phương pháp nào bạn quan tâm. Tôi không phải là một nhà phát triển C# và tôi cũng không chắc chắn nếu điều này là những gì bạn đang sau, nhưng what the PHP Manual has to say about connection handling là thế này:
Khi một kịch bản PHP đang chạy bình thường tình trạng
NORMAL
, đang hoạt động. Nếu máy khách từ xa ngắt kết nối, cờ trạng tháiABORTED
được bật. Mất kết nối máy khách từ xa thường do người dùng nhấn nút STOP của người dùng. Nếu giới hạn thời gian áp dụng PHP (xemset_time_limit()
) bị trúng, cờ trạng tháiTIMEOUT
được bật.
Bạn có thể kiểm tra tình trạng kết nối với ... connection_status()
:
switch (connection_status())
{
case CONNECTION_NORMAL:
// ...
break;
case CONNECTION_ABORTED:
// ...
break;
case CONNECTION_TIMEOUT:
// ...
break;
}
Các POSIX functions (chỉ có sẵn dưới hệ thống POSIX) cung cấp một số thông tin bổ sung. Ngoài ra, một số miscellaneous functions, cụ thể là sys_getloadavg()
và các chức năng ngủ có thể hữu ích để làm, tùy thuộc vào những gì bạn đang tìm kiếm.
Có bất kỳ phương thức tương đương nào trong PHP như phương pháp C# "Process.Start()".
Có một số Program Execution functions, cụ thể:
exec()
passthru()
proc_open()
shell_exec()
- xem thêm backtick operatorsystem()
Dưới Windows bạn cũng có thể sử dụng COM class để mở ra cửa sổ lệnh:
$cmd = new COM('WScript.Shell');
Ngoài ra, nếu bạn muốn được an toàn khỏi sự tấn công tiêm mã đừng quên rằng bất kỳ người dùng cung cấp đầu vào nên được thoát với escapeshellarg()
hoặc escapeshellcmd()
.
Tôi tin rằng nhiều người trong số họ đang trong bản phát hành hiện tại. Không gian tên trong 5.3, và tôi đã sử dụng các hàm tạo trong mã của tôi. – Puppy
@DeadMG đã cập nhật câu trả lời cho độ chính xác và làm cho nó có thêm 'bằng chứng trong tương lai'. Khi tôi nói 'xây dựng' tôi không có nghĩa là 'nhà thầu'. Bằng cách nói rằng PHP có ít 'cấu trúc', tôi chỉ đơn giản nói rằng OOP có ở đó nhưng nó không hoàn toàn nổi bật theo cách mà một lập trình viên Java/C#/Python mong đợi.OOP trong PHP là khá tối thiểu so với hầu hết các ngôn ngữ yêu cầu hỗ trợ OOP. –
@DeadMG "Tôi tin rằng nhiều người trong số họ đang trong bản phát hành hiện tại" có, họ đang ở đó nhưng họ không được sử dụng trong thư viện chuẩn. Để sử dụng 'exec' bạn không gõ một cái gì đó như 'process :: exec()' vì không gian tên và OOP không được sử dụng trong thư viện chuẩn. Về cơ bản, tất cả các hàm dựng sẵn của PHP đều sống trong không gian tên chính. Câu cuối cùng đó là đủ để khiến nhiều nhà phát triển phải rạn nứt nhưng để khắc phục nó, các nhà phát triển PHP sẽ phải lập lại bản đồ tất cả hàng nghìn hàm dựng sẵn. –