У меня есть скрипт php, который берет данные из моей БД и создает XML с командой exec (в ОС Linux).linux command: плохая замена
Я знаю, что это не лучший способ, чтобы создать его, я буду обновлять это позже :)
Во всяком случае, моя проблема заключается в том, что она дает ошибку «плохую замену».
Вот простой PHP код, который может показать вам ошибку ... Вы можете заметить, что для того, чтобы создать «действительный XML» (то есть: хорошо отформатирован), я вручную избежать некоторые специальные символы:
<?php
$field="\${sao{}}\$";
$fieldParsed.= str_replace(
array("&", "<", ">", '"', "'", "\\", "`"),
array("&", "<", ">", """, "'", "\\\\", "`"),
$field
);
$data="<doc><field name=\"myname\">".$fieldParsed."</field></doc>";
$cmd='echo "'.addSlashes($data).'" >> /tmp/test.txt';
echo "\n\n".$cmd. "\n\n";
exec($cmd);
Был ли способ избежать «интерпретации bash» данных $? Иными словами, просто возьмите его так, как есть ...
ПРИМЕЧАНИЕ. Этот код является лишь примером, поэтому escape-код не будет действительным. Я ищу общее решение (если есть) ...
Спасибо.
В какой момент именно это состояние ваших переменных не соответствуют вашим ожиданиям? Где именно вы получаете эту ошибку? Если это действительно в 'exec()', каково точное содержание '$ cmd' в то время? –
Ну, может быть, вы могли бы написать '$ data' в файл с php и прочитать файл с помощью отдельного сценария bash, который вы вызываете из php. По крайней мере, это позволило бы избежать конкатенации строк и передачи аргументов в php. – jDo
Я думаю, проблема в том, что когда я запускаю exec, bash интерпретирует $ как «команду» ... например: $ field = «мой текст с« backquote »; также обеспечит ошибку, если я не заменил «' »на« & # 96 »... – Bast