Выполнение команды Linux через PHP

#php #linux #root #vps

#php #linux #root #vps

Вопрос:

Я запускаю Debian 7 на своем VPS, и я хочу иметь PHP-скрипт, который позволил бы мне сделать следующее:

У меня есть сервер MTA, и у меня есть файлы журналов в отдельном каталоге ( /root/mta/resources/logs ), и веб-сайт, очевидно, находится в /var/www , как бы я мог переместить log.txt файл из местоположения MTA в /var/www ?

Возможно ли это сделать только через PHP или .sh также потребуется?

Комментарии:

1. linuxquestions.org/questions/linux-general-1/… Я прочитал статью, но мне кажется опасным пробовать ее, не спросив сначала совета.

2. И почему у вас это не сработало? Совет профессионала: не позволяйте сообществу отправляться на рыбалку, чтобы узнать у вас необходимую информацию.

Ответ №1:

Попробуйте создать символическую ссылку с: ln -s /root/mta/resources/logs/log.txt /var/www/log.txt

Для обеспечения безопасности вы можете добавить .htaccess :

 <Files /var/www/log.txt>
Order Allow,Deny
Deny from all
</Files>
  

Комментарии:

1. Я надеюсь, что вы не просто сделали этот файл журнала общедоступным.

2. Это технически отвечает на вопрос. Он также полностью игнорирует тот факт, что это в лучшем случае «не единственное, что нужно сделать», а в худшем «ужасная идея и огромный риск для безопасности».

3. @PeeHaa Здесь вопрос не в этом. Вопрос в том, как иметь возможность читать файл, который находится вне document_root? Проблема безопасности — это другой вопрос.

4. Также не возникает вопроса, как я могу нести ответственность за утечку данных моих пользователей, но вы все равно это делаете. Ваша точка зрения?

5. Да, то, что безопасность — это другой вопрос, технически верно. Однако это вопрос, который OP, возможно, не знает , нужно задать, и поэтому, по крайней мере, необходимо упомянуть, что «эй! это может быть плохой идеей! иди почитай о X»

Ответ №2:

Если вы хотите переместить файл из точки A в точку B с помощью php, просто используйте system для выполнения соответствующую командную строку mv или ln . Нет необходимости во всей проверке ошибок в скрипте, на который вы ссылаетесь (в своих комментариях).

Прежде чем вы это сделаете, выясните (а), можно ли безопасно поместить этот конкретный файл журнала в корень документа, (б) действительно ли вам нужно поместить его туда (почему бы просто не получить к нему доступ там, где он находится сейчас?), и (в) будет ли это вообще работать: если вы просто переместите файл, вы можете ожидать, что сервер создаст новый.

Вероятно, вам следует спросить о том, как решить вашу реальную проблему, потому что это не похоже на решение, в котором вы должны преуспеть.

Комментарии:

1. Да, я только что прочитал о system() , теперь я хотел переместить его, потому что я думал, что невозможно прочитать из файла .txt, который не находится в /var/www . Поправьте меня, если я ошибаюсь.

2. Apache может читать только из корня документа, но ваш PHP-процесс обычно может достигать чего угодно. Какую проблему вы на самом деле пытаетесь решить?