Không có cách nào để thiết lập biến môi trường từ dòng lệnh đặc biệt để thực hiện một kịch bản bởi các tùy chọn đi đến nhị phân PHP.
Bạn có một vài lựa chọn:
- Đặt biến trên toàn cầu trên hệ thống.
- Đặt biến trên dòng lệnh trước khi gọi tập lệnh. Điều này sẽ tồn tại trong môi trường sau khi kịch bản của bạn đã hoàn thành việc thực hiện, mà bạn có thể không muốn.
- Quấn tập lệnh PHP trong tập lệnh khác, cho phép bạn tạo biến tạm thời chỉ tồn tại trong thời lượng tập lệnh.
- Sử dụng tùy chọn dòng lệnh thay vì biến môi trường.
Hai tùy chọn cuối cùng có lẽ là cách sạch nhất để làm điều này, trong đó biến được tạo chỉ tồn tại trong thời gian chạy tập lệnh của bạn.
Việc triển khai tùy chọn 1 phụ thuộc vào hệ thống.
Việc triển khai tùy chọn 2 cũng phụ thuộc vào hệ thống - trên Windows bạn sẽ thực hiện set APPLICATION_ENV=staging&& php script.php
và trên * nix, nó sẽ là export APPLICATION_ENV='staging' && php script.php
.
Nếu bạn chọn tùy chọn 3, bạn có thể bị cám dỗ vì kịch bản lệnh shell, nhưng điều này không phải là di động (bạn cần một tệp batch cho Windows và kịch bản lệnh shell cho môi trường * nix. d đề nghị bạn viết một kịch bản PHP wrapper đơn giản, một cái gì đó như thế này:.
<?php
putenv('APPLICATION_ENV=staging');
include('script.php');
điều này cho phép bạn để lại kịch bản mục tiêu của bạn không thay đổi và thiết lập các biến môi trường cho phiên làm việc của kịch bản chỉ
một kịch bản wrapper
phức tạp hơn có thể dễ dàng được tạo ra cho phép bạn chỉ định các biến trên dòng lệnh và thậm chí chỉ định động t sẽ được thực hiện khi các biến này được đặt.
Lựa chọn 4 có thể được thực hiện bằng cách sử dụng biến :
<?php
$applicationEnv = $argv[1];
// rest of you script
...và gọi kịch bản như:
php script.php staging
Tuy nhiên, nó xảy ra với tôi rằng bạn dường như chỉ để kịch bản mà môi trường đang chạy trong (dàn, dev, sống, vv) - trong trường hợp nó mà có thể đơn giản nhất để đặt biến toàn bộ máy chủ và đổi tên nó khi cần thiết để tránh va chạm với các biến mà các ứng dụng khác có thể đang đặt. Bằng cách đó bạn có thể đơn giản gọi kịch bản và không cần phải lo lắng về điều này. Điều này giả định rằng bạn dàn dựng môi trường chạy trên một máy tính khác để sống (mà nó nên được).
là không gian giữa -d và APPLICATION_ENV một lỗi đánh máy ? Thử đặt putenv ("APPLICATION_ENV = dàn dựng"); trong script.php – Tdelang
Bạn có cần thiết lập một số biến từ bên trong tập lệnh hay truy cập biến môi trường từ bên trong tập lệnh không? Nếu sau này, bạn đang sử dụng mã nào để truy cập nó? – DaveRandom
Trong biến tập lệnh được truy xuất bằng hàm 'getenv()'. – Wiktor