Từ một dấu nhắc lệnh, tôi nhận được như sau:
>echo %ProgramFiles%
C:\Program Files
Tuy nhiên, một số ứng dụng (PHP trong trường hợp này, mặc dù tôi đã thấy hành vi tương tự từ bên trong httpd.conf của Apache), đó là:
>php -r "echo $_ENV['ProgramFiles'];"
C:\Program Files (x86)
Tại sao lại thế này?
Bối cảnh: Tôi đang phát triển các tập lệnh không rõ hệ điều hành của máy chủ lưu trữ là 32 bit hoặc 64 bit và đối với các tệp cấu hình, điều này hoạt động rất tốt. Trên hệ thống 32 bit, %ProgramFiles%
là "C: \ Chương trình tệp" và trên hệ thống 64 bit %ProgramFiles%
có vẻ như trả về C:\Program Files (x86)
. Tôi chỉ tò mò tại sao điều tương tự không đúng khi tôi thử nó từ dấu nhắc lệnh của Windows (hoặc trong thanh thám hiểm, v.v.). Có một dấu nhắc lệnh 64 bit hay cái gì đó không?
%programfiles%
trả vềC:\Program Files
(trên cấu hình mặc định của Windows). Trên các phiên bản x64 của Windows,%programfiles(x86)
trả vềC:\Program Files (x86)
. Không chắc chắn tại sao php lại trả về một cái gì đó trái ngược với điều đó, nhưng bạn có thể dễ dàng xác minh các biến môi trường cho một hệ thống nhất định được đặt bằng cách chạyset
từ dấu nhắc lệnh trên x64 Windows và x86 Windows.