У меня есть простой сценарий, в котором пользователь нажимает кнопку, и код выполняет команду оболочки, которая вырезает зашифрованные данные base64 из csv и помещает их в текстовое поле. Затем я просто присваиваю это значение переменной и вывожу декодированный результат. Тем не менее, мой результат ничего. Если я повторю $encoded_data, я увижу закодированные строки.
Мои данные расположены так в текстовом поле:
ZGF2aWRAZW1haWwuY29t
ZGF2aWRAZW1haWwuY29t
ZGF2aWRAZW1haWwuY29t
ZGF2aWRAZW1haWwuY29t
...
Есть сотни строк закодированных строк.
Если я передаю строку, декодер работает. Но с текстом внутри текстового поля он вообще ничего не возвращает. Я предполагаю, что количество переданных строк вызывает проблему с памятью. Я также заметил, что если я пытаюсь передать несколько строк, я получаю странные символы, вероятно, из-за разрывов строк. Как мне избежать и этого?
<form name = "decode" action = "" method = "post" enctype = "multipart/form-data">
<textarea id = "decode_field" name = "decode_field" rows = "10" cols = "50" autofocus><?
if (isset($_POST['decode_btn'])) {
// Cut base64 data from csv file. Selected data is in col 2 of each row.
$encoded_data = shell_exec("cut -d, -f2 test.csv");
// Display data to user.
echo base64_decode($encoded_data);
}
?></textarea>
<input type = "submit" name = "decode_btn" value = "Get Decoded Data" />
</form>
вывод должен быть строками base64, декодированными в обычные строки построчно.






Вместо этого вы хотите использовать exec, что позволит вам получить массив строк вывода из вашего разреза.
$data = array();
exec("cut -d, -f2 test.csv", $data);
foreach($data as $line) {
echo base64_decode($line);
}
Вы пробовали разделить encoded_data на новые строки и зациклить каждую строку через base64_decode? Эта функция, похоже, не может обрабатывать несколько строк base64 за один вызов.