Я использую команду ls
через PHP и exec()
, и я получаю другой вывод, чем когда я запускаю ту же команду через оболочку. При запуске ls
через PHP год и месяц даты заменяются на имя месяца:
Запуск команды через оболочку:
$ ls -lh /path/to/file
-rw-r--r-- 1 sysadmin sysadmin 36M 2011-05-18 13:25 file
Запуск команды через PHP:
<?php
exec("ls -lh /path/to/file", $output);
print_r($output);
/*
Array
(
[0] => -rw-r--r-- 1 sysadmin sysadmin 36M May 18 13:25 file
)
*/
Обратите внимание:
-проблема не возникает, когда я запускаю скрипт PHP через cli (это происходит только при запуске через apache)
-Я проверил исходный код страницы, чтобы убедиться, что то, что я видел, было тем, что я получал (и я получаю название месяца вместо правильной даты)
-Я также запускаю команду ls
через оболочку от имени пользователя www-data
, чтобы увидеть, выдавал ли ls
различный вывод в зависимости от пользователя (вывод всегда одинаков из оболочки, то есть я получаю дату в гггг-мм-дд вместо названия месяца)
Обновление с ответом
alias
дал мне это:
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
Из этих псевдонимов мне не удалось найти переключатель, который непосредственно отвечал за отображение времени:
-C list entries by columns
-F append indicator (one of */=>@|) to entries
-A do not list implied . and ..
-a do not ignore entries starting with .
-l use a long listing format
Однако использование --time-style=long-iso
в PHP решило проблему.