Thực thi PHP trong nền

Chào mừng bạn đến với hướng dẫn về cách chạy tập lệnh PHP trong nền. Vậy bạn đang tìm cách để “âm thầm chạy” một tập lệnh PHP đồ sộ? . Nhưng may thay, có một cách thay thế đơn giản

Chúng ta có thể sử dụng

 /dev/null &");
    break;
}
3 hoặc
 /dev/null &");
    break;
}
4 để chạy tập lệnh PHP ở chế độ nền

  • Máy chủ Windows –
     /dev/null &");
        break;
    }
    5
  • Máy chủ Linux –
     /dev/null &");
        break;
    }
    6

Tất nhiên, đây là một sự đơn giản hóa những gì có thể được thực hiện. Hãy để chúng tôi xem qua một số ví dụ thực tế trong hướng dẫn này – Đọc tiếp

ⓘ Tôi đã bao gồm một tệp zip chứa tất cả mã nguồn khi bắt đầu hướng dẫn này, vì vậy bạn không cần phải sao chép-dán mọi thứ… Hoặc nếu bạn chỉ muốn đi sâu vào

 

 

TLDR – TRANG TRÌNH BÀY NHANH

Tải xuống & Ghi chú

 

TẢI XUỐNG & LƯU Ý

Đầu tiên, đây là liên kết tải xuống mã ví dụ như đã hứa

 

GHI CHÚ NHANH

  • Nếu bạn chỉ muốn chạy một tập lệnh nền đơn giản, hãy sử dụng
     /dev/null &");
        break;
    }
    0 và
     /dev/null &");
        break;
    }
    1
  • Đối với "quản lý tác vụ nâng cao", hãy xem qua tập lệnh
     /dev/null &");
        break;
    }
    2
Nếu bạn phát hiện ra một lỗi, hãy bình luận bên dưới. Tôi cũng cố gắng trả lời các câu hỏi ngắn, nhưng đó là một người so với cả thế giới… Nếu bạn cần câu trả lời gấp, vui lòng xem danh sách các trang web của tôi để được trợ giúp về lập trình

 

MÃ VÍ DỤ TẢI XUỐNG

Nhấp vào đây để tải xuống mã nguồn, tôi đã phát hành nó theo giấy phép MIT, vì vậy hãy thoải mái xây dựng trên mã nguồn hoặc sử dụng nó trong dự án của riêng bạn

 

 

NỀN TẢNG PHP

Được rồi, bây giờ chúng ta hãy xem các ví dụ về việc chạy các tập lệnh PHP trong nền

 

VÍ DỤ 1) NỀN TẢNG PHP ĐƠN GIẢN

1A) KẾ HOẠCH NỀN DÒNG LỆNH

1a-nền. php

0) { return true; }
  return false;
}
if (!is_cli()) { exit("Please run this in the command line."); }
 
// (B) CREATE A DUMMY TEXT FILE
// YOU DO WHATEVER IS REQUIRED IN YOUR PROJECT...
file_put_contents(
  __DIR__ . DIRECTORY_SEPARATOR . "dummy.txt",
  "Background script ran at " . date("Y-m-d H:i:s")
);

Đầu tiên, tạo tập lệnh PHP mà bạn muốn chạy trong nền. Đối với ví dụ này

  1. Để đảm bảo rằng tập lệnh chỉ được khởi chạy trong dòng lệnh
  2. Làm bất cứ điều gì được yêu cầu trong dự án của bạn. Nhưng đối với cái này, chúng ta sẽ chỉ tạo một
     /dev/null &");
        break;
    }
    3 để cho biết “nó hoạt động”

 

 

1B) CHẠY TẬP ĐOẠN NỀN

chạy 1b. php

 /dev/null &");
    break;
}

Tiếp theo, chúng tôi tạo một tập lệnh PHP sẽ chạy một tập lệnh PHP khác trong nền… Có, chỉ cần truy cập

 /dev/null &");
    break;
}
1 trong trình duyệt hoặc chạy trong dòng lệnh. Kiểm tra dấu thời gian trong tệp
 /dev/null &");
    break;
}
3

P. S. Đảm bảo rằng PHP có quyền chạy các lệnh nếu không điều này sẽ thất bại

 

1C) VẤN ĐỀ TIỀM NĂNG & PHÒNG NGỪA

  • Lưu ý rằng “tập lệnh xử lý nền” là im lặng . Nó sẽ không xuất ra bất kỳ văn bản nào và bạn sẽ không thấy bất kỳ thông báo lỗi nào.
  • Những người thiếu kiên nhẫn cũng có thể chạy thư rác hoặc tải lại (nếu chạy từ trình duyệt). Điều này sinh ra nhiều phiên bản của tập lệnh nền và có thể làm hỏng máy chủ
  • Vì vậy, tốt nhất là giữ một tệp nhật ký, để bạn có thể theo dõi và sửa lỗi. Đồng thời triển khai một số loại “khóa”, đưa chúng ta đến ví dụ tiếp theo – Kiểm soát quy trình

 

 

VÍ DỤ 2) NỀN TẢNG PHP VỚI KIỂM SOÁT QUY TRÌNH

2A) BẢNG CƠ SỞ DỮ LIỆU NHIỆM VỤ NỀN TẢNG

cơ sở dữ liệu 2a. sql

CREATE TABLE `tasks` (
  `user_id` bigint(20) NOT NULL,
  `process_id` varchar(32) NOT NULL,
  `task_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `tasks`
  ADD PRIMARY KEY (`user_id`),
  ADD KEY `task_date` (`task_date`);
FieldDescriptionuser_idKhóa chính và khóa ngoại, người dùng đang chạy tác vụ. process_idID tiến trình hệ thống. task_dateThời gian khi nhiệm vụ được bắt đầu

Ý tưởng của bảng này là theo dõi số lượng quy trình nền

  • Chúng tôi đăng ký ID quy trình hệ thống khi người dùng chạy tác vụ nền;
  • Người dùng chỉ có thể chạy một tác vụ nền tại bất kỳ thời điểm nào
  • Nếu muốn, chúng tôi cũng có thể thực hiện
     /dev/null &");
        break;
    }
    6 và đặt "giới hạn toàn cầu" cho số lượng tác vụ nền

 

2B) THƯ VIỆN NHIỆM VỤ NỀN TẢNG PHP

2b-lib-nền. php

 /dev/null &");
    break;
}
0

Điều này thoạt nghe có vẻ đáng sợ, nhưng hãy bình tĩnh và xem xét cẩn thận

  • (A, B, H) Khi tạo
     /dev/null &");
        break;
    }
    7, hàm tạo sẽ tự động kết nối với cơ sở dữ liệu. Hàm hủy đóng kết nối
  • (C)
     /dev/null &");
        break;
    }
    8 Hàm trợ giúp để chạy truy vấn SQL
  • (D đến F) Chỉ có 3 “chức năng thực tế” trong thư viện này
    •  /dev/null &");
          break;
      }
      9 Sử dụng tính năng này để chạy tập lệnh trong nền. Điều này tạo ra một mục nhập cơ sở dữ liệu, khóa và ngăn người dùng chạy nhiều tác vụ
    • CREATE TABLE `tasks` (
        `user_id` bigint(20) NOT NULL,
        `process_id` varchar(32) NOT NULL,
        `task_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
      
      ALTER TABLE `tasks`
        ADD PRIMARY KEY (`user_id`),
        ADD KEY `task_date` (`task_date`);
      
      0 Kịch bản nền sẽ gọi điều này khi nhiệm vụ hoàn thành. Xóa mục nhập cơ sở dữ liệu và cho phép người dùng bắt đầu một tác vụ nền khác
    • CREATE TABLE `tasks` (
        `user_id` bigint(20) NOT NULL,
        `process_id` varchar(32) NOT NULL,
        `task_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
      
      ALTER TABLE `tasks`
        ADD PRIMARY KEY (`user_id`),
        ADD KEY `task_date` (`task_date`);
      
      1 Can thiệp thủ công. Gọi
      CREATE TABLE `tasks` (
        `user_id` bigint(20) NOT NULL,
        `process_id` varchar(32) NOT NULL,
        `task_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
      
      ALTER TABLE `tasks`
        ADD PRIMARY KEY (`user_id`),
        ADD KEY `task_date` (`task_date`);
      
      2 để kết thúc một tập lệnh có thể đã bị treo
  • (G) Thay đổi cài đặt cơ sở dữ liệu và đường dẫn đến
    CREATE TABLE `tasks` (
      `user_id` bigint(20) NOT NULL,
      `process_id` varchar(32) NOT NULL,
      `task_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    ALTER TABLE `tasks`
      ADD PRIMARY KEY (`user_id`),
      ADD KEY `task_date` (`task_date`);
    
    3 thành của riêng bạn

P. S. Thư viện này mới chỉ được thử nghiệm trên Windows . Người dùng Linux/Mac – Bạn sẽ cần thực hiện một số nghiên cứu và thay đổi của riêng mình… Quá lười biếng và quá nhiều rắc rối để cài đặt và thiết lập máy ảo Linux.

 

 

2C) CHẠY VÀ DỪNG CÁC ĐOẠN NỀN

2c-run-kill. php

 /dev/null &");
    break;
}
8

Như trên

  • Chúng tôi sử dụng
    CREATE TABLE `tasks` (
      `user_id` bigint(20) NOT NULL,
      `process_id` varchar(32) NOT NULL,
      `task_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    ALTER TABLE `tasks`
      ADD PRIMARY KEY (`user_id`),
      ADD KEY `task_date` (`task_date`);
    
    4 để chạy tập lệnh trong nền
  • Sử dụng
    CREATE TABLE `tasks` (
      `user_id` bigint(20) NOT NULL,
      `process_id` varchar(32) NOT NULL,
      `task_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    ALTER TABLE `tasks`
      ADD PRIMARY KEY (`user_id`),
      ADD KEY `task_date` (`task_date`);
    
    5 để dừng tập lệnh theo cách thủ công nếu xảy ra sự cố

 

2D) KỊCH BẢN NỀN

nền 2d. php

 /dev/null &");
    break;
}
1

Cuối cùng, đây là tập lệnh mà bạn muốn chạy ở chế độ nền… Nó giống như

 /dev/null &");
    break;
}
0, nhưng có một bổ sung nhỏ là xóa mục nhập cơ sở dữ liệu khi hoàn tất

 

 

BIT BỔ SUNG & LIÊN KẾT

Đó là tất cả cho hướng dẫn, và đây là một số bổ sung nhỏ có thể hữu ích cho bạn

 

GIẢI PHÁP THAY THẾ

Tất nhiên, shell script chỉ là một trong nhiều cách để thực hiện xử lý song song. Có nhiều gói khác mà bạn có thể kiểm tra, và đây là một vài gói mà tôi thấy khá thú vị

  • Chủ đề PHP
  • cây phệ
  • Quy trình Symfony

 

LIÊN KẾT và THAM KHẢO

  • popen, pclose, exec – Hướng dẫn sử dụng PHP chính thức
  • Nhật ký lỗi – Hướng dẫn sử dụng PHP chính thức
  • lệnh wmic – Microsoft
  • Daemon PHP đơn giản – Code Boxx

 

BẢNG CHEAT INFOGRAPHIC

Cảm ơn bạn đã đọc, và chúng tôi đã đi đến phần cuối của hướng dẫn này. Tôi hy vọng rằng nó đã giúp bạn với dự án của bạn và nếu bạn muốn chia sẻ bất cứ điều gì với hướng dẫn này, xin vui lòng bình luận bên dưới. Chúc may mắn và mã hóa hạnh phúc

Làm cách nào để chạy hàm PHP ở chế độ nền?

Vì vậy, để chạy bất kỳ quy trình nền nào từ PHP, chúng ta chỉ cần sử dụng hàm exec hoặc shell_exec để thực thi bất kỳ lệnh đầu cuối nào và trong lệnh đó, chúng ta chỉ cần thêm & vào . .

Làm cách nào để chạy tập lệnh PHP ở chế độ nền trong Linux?

Khái niệm, Trong LINUX có một shell script được sử dụng để chạy tiến trình ở chế độ nền. Bạn có thể đặt một tác vụ (chẳng hạn như lệnh hoặc tập lệnh) ở chế độ nền bằng cách thêm dấu & vào cuối dòng lệnh . Toán tử & đặt lệnh ở chế độ nền và giải phóng thiết bị đầu cuối của bạn.

Shell_exec trong PHP là gì?

Hàm shell_exec() là một hàm có sẵn trong PHP được sử dụng để thực thi các lệnh thông qua shell và trả về đầu ra hoàn chỉnh dưới dạng một chuỗi. The shell_exec is an alias for the backtick operator, for those used to *nix. If the command fails return NULL and the values are not reliable for error checking.

Phương pháp để thực thi tập lệnh PHP từ dòng lệnh là gì?

Bạn chỉ cần làm theo các bước để chạy chương trình PHP bằng dòng lệnh. .
Mở terminal hoặc cửa sổ dòng lệnh
Chuyển đến thư mục hoặc thư mục được chỉ định chứa các tệp php
Sau đó, chúng ta có thể chạy mã php bằng lệnh sau. tên_tệp php. php