Zapisywanie tekstu ze znakami w tagu textarea


(karol1k95) #1

Witam

Na wstępie dodaję, że wcześniej nie miałem styczności z PHP i linuxem. Chcę stworzyć małą stronkę, na której będę mógł zapisać dowolny tekst a on zostanie wysłany na mojego smartphona. Wykorzystałem do tego pushbulleta.

Tak więc stworzyłem prosty formularz
https://pastebin.com/KsErmZR8
i do niego drugi skrypt, który zapisuje dane do pliku tekstowego
https://pastebin.com/Q2wAVYE4

Do tego crontab wywołuje co minutę bashowy skrypt, którego kod znajdziecie poniżej
hex="$(xxd -p /var/www/html/wait.PB)“
cleanFile=”$(echo 424547494e0a)"
if [ $hex == $cleanFile ]; then echo Lupa_niemacorobic; else sh /home/skrypty/pushbullet.false;fi

W pushbullet.false znajduje się

mv /var/www/html/formularz.php /var/www/html/formularz.php.lock
mv /var/www/html/pushbullet.php /var/www/html/pushbullet.php.lock
cat /var/www/html/wait.PB | /usr/local/bin/pb push
 > /var/www/html/wait.PB
echo "BEGIN" >> /var/www/html/wait.PB
mv /var/www/html/pushbullet.php.lock /var/www/html/pushbullet.php
mv /var/www/html/formularz.php.lock /var/www/html/formularz.php

Jakby to powiedzieć, wszystko “działa” ale kiedy mam do czynienia ze zwykłym tekstem. Gdy zacznę wpisywać różne znaczki pokroju " }, {," skrypt nie działa. Wystarczy skopiować na przykład kod PHP, wtedy linux głupieje bo wszystko jest realizowane przez komendę "echo >> "…

BTW. Jeśli ktoś zna dobrą książkę dla nooba do nauki php i basha, chętnie przyjmę propozycje.


(Domker) #2

Musisz “uciekać” ze znaków specjalnych, żeby ich nie interpretowało:
http://wiki.bash-hackers.org/syntax/quoting

lub dodawać jako blok komentarza basha:

<<'KOMENTARZ1'
dowolny kod
dowolny kod
dowolny kod 
KOMENTARZ1

Ewentualnie jako base64 koduj.


(karol1k95) #3

Przerobiłem pushbullet.php
wcześniej:

<?php
$date = date('H:i:s');
$name = $_GET["name"];
$output = $_GET["output"];
$outputtrim = trim(preg_replace('/\s+/', ' ', $output));
$command = "echo ". $date . " ".  $name . " said: " . $outputtrim . " >> /var/www/html/wait.PB";
$execute = shell_exec($command);
echo "<pre>$command</pre>";
?>

teraz:

<?php
$date = date('H:i:s');
$name = $_GET["name"];
$output = $_GET["output"];
$file = "/var/www/html/wait.PB";
$text = $date . " " . $name . " said: " . $output . "\n";
file_put_contents($file, $text, FILE_APPEND | LOCK_EX);
?>