User 13204940 Ответов: 1

Нужно конвертировать небольшой скрипт bash в PHP


Привет,

Я нашел небольшой скрипт bash, чтобы сделать именно то, что мне нужно, но я подправил несколько вещей. Теперь я понял, что мне это нужно в PHP вместо этого.

Не мог бы кто-нибудь помочь мне преобразовать это в PHP, пожалуйста? Я сделал некоторые части, но с частями "==" я не уверен, как это работает.

ssrc=$(tshark -n -r pcap_filename_here -R rtp -T fields -e rtp.ssrc -Eseparator=, | sort -u | awk 'FNR ==1{print}')
echo $ssrc

sudo tshark -n -r pcap_filename_here -R rtp -R "rtp.ssrc == $ssrc" -T fields -e rtp.payload | tee payloads

for payload in `cat payloads`; do IFS=:; for byte in $payload;
do printf "\\x$byte" >> output.raw; done;
done

sox -t raw -r 8000 -v 4 -c 1 -e a-law output.raw output.wav



<?php

$filename = $_GET['filename'];

exec("tshark -n -r $filename -R rtp -T fields -e rtp.ssrc -E separator=, | sort -u | awk 'FNR ==1{print}'", $ssrc);

echo $ssrc;

exec("sudo tshark -n -r $filename -R rtp -R "rtp.ssrc == $ssrc" -T fields -e rtp.payload | tee payloads");

# unsure how to do this loop

exec('sox -t raw -r 8000 -v 4 -c 1 -e a-law output.raw output.wav');

?>


Что я уже пробовал:

--------------------------------------------------------------------------------

Richard MacCutchan

Почему бы просто не "исполнить" весь сценарий bash?

[no name]

Хотя я об этом не думал, мне нужно добавить в скрипт некоторые вещи, которые я не знаю, как сделать в bash, так как я гораздо более опытен в php. Кроме того, для этого потребуется дополнительный php-файл для exec.

1 Ответов

Рейтинг:
1

Jochen Arndt

Когда вам нужно включить двойную кавычку в строку, вы должны экранировать ее, как описано в разделе PHP: Strings - Manual[^]:

exec("sudo tshark -n -r $filename -R rtp -R \"rtp.ssrc == $ssrc\" -T fields -e rtp.payload | tee payloads");

То for цикл требует понимания команд bash:
Цикл for немного отличается от других языков программирования. В принципе, это позволяет вам перебирать серию "слов" внутри строки.
Таким образом, внешний цикл будет повторяться по словам текстового файла, разделенным пробелами полезная нагрузка и храните их в переменной $payload (cat payloads печатает содержимое текстовых файлов).

Символы, используемые для определения границ слов, хранятся в $IFS переменная (см. Advanced Bash-Scripting Guide: Глава 9. Еще один взгляд на переменные[^]). Так IFS=: изменяет этот параметр с пробелов на символ двоеточия. Внутреннее for петля расщепляется $payload в : разделенные слова и храните их в памяти. $byte. То есть распечатывается с префиксом "\x" к файлу выход.сырье.

Наконец цикл преобразует текстовый файл с шестнадцатеричными байтовыми значениями, разделенными двоеточием, в нотацию стиля C, пропускающую все пробелы. Пример:
Input : 01:ff:3a:4c 5B:88\n 99:43
Output: \x01\xff\x3a\x4c\x5B\x88\x99\x43