Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Операторы исполнения. Чем отличаются?
 
 автор: Ксюха-Фрукт   (19.02.2007 в 09:11)   письмо автору
 
 

Для вызова внешних команд в php используются обратные кавычки, операторы shell_exec, system, exec и другие. Объясните чем они отличаются. Особенно обратные кавычки и shell_exec. Заранее спасибо.

   
 
 автор: Санька   (19.02.2007 в 09:50)   письмо автору
 
   для: Ксюха-Фрукт   (19.02.2007 в 09:11)
 

PHP пытается выполнить строку заключенную в обратные кавычки, как консольную команду и возвращает полученный вывод (т.е он не просто выдается на выходе а, например, может быть присвоен переменной). Использование обратных кавычек аналогично использованию функции shell exec(). Обратные кавычки недоступны в случае если установлен безопасный режим или отключена функция shell exec() Пример надо?

   
 
 автор: Ксюха-Фрукт   (19.02.2007 в 11:14)   письмо автору
 
   для: Санька   (19.02.2007 в 09:50)
 

shell exec тоже не будет работать при безопасном режиме... и при использовании shell exec вывод также можно сохранять в переменную...
мне нужно именно конкретное различие

   
 
 автор: Санька   (19.02.2007 в 11:22)   письмо автору
 
   для: Ксюха-Фрукт   (19.02.2007 в 11:14)
 

Леди если вы понимаете отлично тех. английский могу прислать текст.

   
 
 автор: Ксюха-Фрукт   (19.02.2007 в 11:27)   письмо автору
 
   для: Санька   (19.02.2007 в 11:22)
 

Английский я знаю...но не в совершенстве...учебник на английском у меня есть... впринципе я понинмаю что там написано..но видимо, из-за несовершенства знания мною английского не могу понять ту суть, чем именно они различаются.... видимо это знает тока мой препод... который не хочет этого говорить....говорит ищи.... я уже опросила всех знакомых..но никто точно не может сказать

   
 
 автор: Ксюха-Фрукт   (19.02.2007 в 11:31)   письмо автору
 
   для: Санька   (19.02.2007 в 11:22)
 

То, что обратные кавычки и shell_exec работают идентично, я тоже знаю.....препод мне сказал, что shell_exec придумали чтоб он выполнял еще какуюто функцию, которую не выполняют обратные кавычки

   
 
 автор: Санька   (19.02.2007 в 11:38)   письмо автору
 
   для: Ксюха-Фрукт   (19.02.2007 в 11:31)
 

Ясно может кто и знает то обязательно напишет ждите! А над чем трудитесь?

   
 
 автор: Ксюха-Фрукт   (19.02.2007 в 11:42)   письмо автору
 
   для: Санька   (19.02.2007 в 11:38)
 

Все просто и банально...делаю лабораторную....вернее я ее уже сделала...защитить не получается...и все изза того что не могу ответить почему shell_exec рациональнее всего остального....дело в том, что ранее я никогда на php вообще не писала...если что, то суть лабораторной состоит в следующем : сначала создается авторизация, затем выбор между двумя действиями : пингование и трассировка (ping и tracert это команды из командной строки для проверки работоспособности узлов в сети), эти команды вызываются с помощью shell_exec

   
 
 автор: Бамси   (19.02.2007 в 11:39)   письмо автору
 
   для: Ксюха-Фрукт   (19.02.2007 в 11:31)
 

А где на клавиатуре эти обратные одинарные ковычки? А то что то искал так и не нашел :)

   
 
 автор: Санька   (19.02.2007 в 11:42)   письмо автору
 
   для: Бамси   (19.02.2007 в 11:39)
 

Зайди в таб. символов там вроде есть.

   
 
 автор: Ксюха-Фрукт   (19.02.2007 в 11:44)   письмо автору
 
   для: Бамси   (19.02.2007 в 11:39)
 

(``) это где буква ё стоит...тока надо на английский язык поставить

   
 
 автор: Trianon   (19.02.2007 в 11:45)   письмо автору
 
   для: Ксюха-Фрукт   (19.02.2007 в 11:31)
 

shell_exec возвращает полный вывод, порожденный командой.
exec возвращает только последнюю строку этого вывода. Правда он может заполнить этими строками, переданный ему массив (второй аргумент), и вернуть статус возврата команды ( третий аргумент)
system может вернуть статус возврата и последнюю строку вывода.
бэктрик-оператор тоже отличается от shell_exec... Тем, что в shell_exec можно что угодно передать, а в косых кавычках удастся всунуть лишь константную строку.
Короче, сборная солянка.... каждая чуть чуть да отличается.....

   
 
 автор: Ксюха-Фрукт   (19.02.2007 в 11:47)   письмо автору
 
   для: Trianon   (19.02.2007 в 11:45)
 

можно еще более подробно о обратных кавычках и shell_exec....

   
 
 автор: Trianon   (19.02.2007 в 11:56)   письмо автору
 
   для: Ксюха-Фрукт   (19.02.2007 в 11:47)
 

так... наврал. В бактриках, оказывается, переменные подставляются, как в обычных кавычках.
Можно считать, что
`command` эквивалентно $shell_exec("command") вплоть до подстановки переменных.
`

   
 
 автор: Ксюха-Фрукт   (19.02.2007 в 12:01)   письмо автору
 
   для: Trianon   (19.02.2007 в 11:56)
 

пример использования обратных кавычек
<?php
$output = `ls -al`;
echo "<pre>$output</pre>";
?>


пример использования shell_exec
<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>


то, как они задаются и вывод у них идентичны.....

   
 
 автор: Ксюха-Фрукт   (19.02.2007 в 12:03)   письмо автору
 
   для: Trianon   (19.02.2007 в 11:56)
 

препод мне сказал что shell_exec придумали еще для чего то....оно выполняет еще какуюто функцию....сказал искать какую..

   
 
 автор: Ксюха-Фрукт   (19.02.2007 в 11:58)   письмо автору
 
   для: Trianon   (19.02.2007 в 11:45)
 

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

   
 
 автор: Trianon   (19.02.2007 в 12:02)   письмо автору
 
   для: Ксюха-Фрукт   (19.02.2007 в 11:58)
 

Что такое константная переменная, я не знаю. Боюсь, это словосочетание может в ступор повергнуть не только преподавателя.

Вот пример, на котором можно что-то демонстрировать.

<form><input name=cmd /></form>
<?php include('config.inc.php');
  if(isset(
$_REQUEST['cmd']))
  {
     
$cmd $_REQUEST['cmd'];

     
$out = `$cmd`;
     
//$out = shell_exec($cmd);

     
$out htmlspecialchars($out);
     
$out convert_cyr_string($out'd''w');
     echo 
"<pre>$out</pre>";
  }
?>

   
 
 автор: Ксюха-Фрукт   (19.02.2007 в 12:05)   письмо автору
 
   для: Trianon   (19.02.2007 в 12:02)
 

мне бы популярнее...

   
 
 автор: kasmanaft   (19.02.2007 в 14:23)   письмо автору
 
   для: Ксюха-Фрукт   (19.02.2007 в 11:58)
 

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

А насчет shell_exec ничего не скажу. Предположу, что shell_exec может запускать шелл скрипты shell_exec("script.sh") - но, возможно, это будет выглядеть точно также и в обратных кавычах...

   
 
 автор: Ксюха-Фрукт   (19.02.2007 в 15:05)   письмо автору
 
   для: kasmanaft   (19.02.2007 в 14:23)
 

Константная строка и строковая константа...кхм...я так подозреваю, что это не одно и то же.....

   
 
 автор: Ксюха-Фрукт   (20.02.2007 в 10:35)   письмо автору
 
   для: Trianon   (19.02.2007 в 11:45)
 

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


Вопрос : что угодно всунуть...это что например???

   
 
 автор: Trianon   (20.02.2007 в 10:48)   письмо автору
 
   для: Ксюха-Фрукт   (20.02.2007 в 10:35)
 

Я ж потом сказал, что ошибся - именно в этом утверждении.
Как в shell_access() , так и в обратные косые кавычки, передается строка команды.
Она (строка) может быть как фиксированной

$out = shell_access('ls');
$out = `ls`;

так и переменной

$cmd = 'dir'
$out = shell_access($cmd);
$out = `$cmd`;

в последнем случае - это частный случай подстановки, или как выражаются апологеты perl - интерполяции переменных.
Равно как и в следующих примерах:

$mask = '*'
$out = shell_access("dir $mask");
$out = `dir $mask`;

   
 
 автор: Ксюха-Фрукт   (20.02.2007 в 10:51)   письмо автору
 
   для: Trianon   (20.02.2007 в 10:48)
 

команда shell_exec а не shell_access.....так все таки чем они отличаются??это вообще вопрос жизни и смерти...

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования