2016-05-10 14 views
5

Tôi là quản trị viên duy nhất của cơ sở dữ liệu. Tôi muốn chạy một kịch bản một lần về cơ bản mất khoảng 3800 hình ảnh được quét (nó sẽ tăng lên đến 10 000 nghìn) và tạo một vài hình thu nhỏ cho mỗi hình ảnh bằng cách sử dụng hàm PHP exec() để thực thi chương trình bên ngoài imagemagick để tạo hình thu nhỏ.Lỗi thời gian thực thi tối đa trong tập lệnh PHP, đây có phải là giải pháp tốt để bỏ qua nó không?

Tôi đã tạo tập lệnh, khởi chạy tập lệnh và tất cả hoạt động hoàn hảo! Tất cả được thực hiện trên máy chủ phát triển cục bộ của tôi. Tập lệnh mất khoảng 11 phút để tạo hàng nghìn hình thu nhỏ. Đó là một hoạt động một lần được chạy mỗi năm, vì vậy hậu quả là tối thiểu.

Cho đến nay rất tốt. Đây là khi tôi gặp vấn đề.

Mọi thứ tôi đã làm trên máy chủ phát triển cục bộ của mình tôi đã thực hiện trên máy chủ trực tiếp cho mục đích thử nghiệm. Tôi có một tài khoản lưu trữ được chia sẻ với hostgator. Chạy kịch bản dài 11 phút của tôi trên một máy chủ chia sẻ cho tôi lỗi 'Thời gian thực thi tối đa 30 giây đã vượt quá ...'. Tôi đã nghiên cứu, đã thử nhiều giải pháp trong bài này (Increase max execution time for php) chỉ để nhận ra không có gì tôi có thể làm để thay đổi thời gian thực thi tối đa của một tập lệnh trên một máy chủ chia sẻ.

Tôi bị kẹt. Vì vậy, câu hỏi của tôi là giải pháp rõ ràng ở đây là gì.

Tôi đã nghĩ đến việc khởi chạy tập lệnh cho mỗi 200 hình ảnh, tự động làm mới trang và chạy lại tập lệnh cho 200 hình ảnh tiếp theo, v.v. cho đến khi không còn hình ảnh nào. Bằng cách này tôi chắc chắn rằng thời gian thực hiện tối đa 30 giây cho phép trên máy chủ chia sẻ của tôi được tôn trọng. Nó trông giống như một giải pháp ngay trên đỉnh đầu của tôi, nhưng tôi không chắc chắn nếu đây là một NO NO, nếu tôi sẽ chạy vào vấn đề lớn hơn, quá nhiều âm ..

Đây có phải là hiển nhiên dung dịch? Bất cứ ai chạy vào cùng một vấn đề? Các bạn đã gợi ý điều gì?

Cảm ơn

+2

Tại sao bạn cần tạo hình thu nhỏ mỗi năm khác? Không phải là một thời gian trong việc tạo ra các hình ảnh ban đầu là đủ để cũng tạo ra các hình thu nhỏ và để nó mãi mãi (cho đến khi nó đã lỗi thời)? –

+2

Bạn có kiểm tra xem đang chạy trong chế độ CLI không có thời gian thực hiện không? Thông thường cho các kịch bản lệnh CLI có '0' (không giới hạn) cho max_execution_time - http://php.net/manual/en/info.configuration.php # ini.max-execution-time – codedge

+0

rất nhiều máy chủ chia sẻ sẽ dừng một tập lệnh chạy dài bất kể bạn làm gì - vì vậy hãy kiểm tra xem –

Trả lời

7

Giả sử bạn có một lý do để tái tạo hình thu nhỏ trong hàng loạt, thay vì làm việc đó tại mỗi upload hình ảnh như đã được đề xuất, tôi muốn làm chính xác như bạn đã - sử dụng một kịch bản mà làm mới bản thân - ngoại trừ việc tôi sẽ không đặt một số hình ảnh cố định.

Thay vào đó tôi sẽ có thời gian kịch bản riêng của mình sau mỗi hình ảnh, và dừng lại khi nó đã đạt được, nói, 25 giây:

$stop = time() + 25; 
while (time() < $stop) { 
    ...find image to process, process it. 
    if (finished()) { 
     die("OK"); 
    } 
} 
// Redirect to next batch of images 
die(Header('Location: ....')); 

Tuy nhiên, làm kiểm tra với ISP của bạn, bởi vì kịch bản của bạn có thể hoặc bị coi là lạm dụng dịch vụ, hoặc có thể bị nhầm lẫn với một cuộc tấn công. Ngoài ra, hãy hỏi xem có thời gian ưu tiên trong ngày để chạy loại bảo trì này hay không.

Cách khác để làm điều tương tự là chạy tập lệnh cho một số lượng rất nhỏ hình ảnh (có thể là một hình ảnh đơn) mỗi lần ai đó truy cập trang chủ. Điều này có tác dụng của việc tải thêm từ kịch bản bắt chước tải thực sự trên máy chủ, tránh những cú sốc đáng xấu hổ hoặc tải cơ bản không phải là bí ẩn. Bạn cần phải tìm cách không bao giờ chọn cùng một hình ảnh từ các phiên bản khác nhau của tập lệnh chạy song song (khi tôi phải làm điều này, tôi đặt cờ trong cơ sở dữ liệu).

+2

chỉ cần nhớ _track hình ảnh cuối cùng được xử lý thành công_ và bắt đầu từ hình ảnh thực hiện tiếp theo ... –

+0

Tại sao không chỉ thực hiện một lần tại một thời điểm? Đặc biệt nó sẽ đơn giản hóa mọi thứ – ArtisticPhoenix

+1

@ArtisiticPhoenix sẽ dẫn đến (trong trường hợp này)> 3800 yêu cầu máy chủ trong khoảng thời gian khá ngắn. Nó sẽ làm chậm máy chủ kể từ khi thiết lập kết nối cho mỗi yêu cầu mất một thời gian và CPU và nếu máy chủ sẽ không có đủ nguồn lực vật lý, trong một trường hợp rất xấu nó có thể đi xuống. – lolbas

Các vấn đề liên quan