<< PHP. Jak otrzymywać zwroty przy wysyłaniu mailii za pomoc± funkcji mail? |
Wykorzystać szansę! >>Autorem artykuły jest
JelcynRaz utworzyłem jaki¶ prosty plik
sh (skrypt shella) pod linuxem, który utworzył kilka jaki¶ plików, które miał obrobić jaki¶ skrypt napisany w PHP. Załóżmy, że plik sh miał tak± zawarto¶ć:
#!bin/bash
ls -l >1.txt
ls -l >2.txt
..co¶ tam jeszcze
No a skrypt w PHP miał za zadanie odczytać pliki
1.txt i
2.txt. Ale za "cholerę" ich nie chciał czytać. Błędów skrypcie na 100% nie było, pliki te były w tym samym katalogu co skrypt. Mało tego, wszedłem na serwer FTP i nie mogłem skasować tych plików za pomoc± Total Commandera (mogłem skasować tylko za pomoc± jakiego¶ WebFTP'a). Postanowiłem utworzyć plik tar.gz, wrzucić go na dysk. No i winrar, który nie raz mi rozpakowywał pliki tar.gz tym razem odmówił posłuszeństwa! Nie mówił, że archiwum jest uszkodzone, ładnie widział jakie pliki wchodz± w skład archiwum, ale nie chciał ich rozpakować!
Zastanawiasz się, co było przyczyn± problemu? OdpowiedĽ jest zaskakuj±ca: plik sh napisałem pod Windowsem w programie
EditPad. Pod windowsem koniec wiersza oznacza się symbolami CR LF (kod ASCII 13 i kod ASCII 10). Pod linuxem natomiast koniec wiersza oznacza się tylko symbolem LF (kod ASCII 10). Shell uznał, że nie tworzę pliku o nazwie
1.txt tylko
1.txtCR (CR to kod ASCII 13). Skrypt w PHP odwoływał się do pliku 1.txt a nie 1.txtCR, więc nie dziwne, że wyst±pił bł±d. A TotalCommander i WinRAR to programy windowsowe, pod windowsem pliki w nazwie nie mog± mieć kodu ASCII 13 i po prostu dla tych programów plik miał tak nietypow± nazwę, że nie mogły go "obsłużyć".
Rozwi±zanie problemu było proste: musiałem zadbać, aby pliki sh które tworzę miały koniec wiersza LF a nie tak jak to pod windowsem bywa CR LF. EditPad ma opcję zapisywania plików tekstowych w formacie Linuxowym, wystarczy z menu
Convert wybrać opcję
To Linux i od teraz już zawsze ten plik będzie miał entery zapisywane w postaci kodu ASCII 10 (LF). Jak ponownie otworzysz ten plik w programie EditPad to on sam zorientuje się, że koniec wiersza to kod ASCII 10 i nie trzeba już będzie pamiętać o konwersji.
<< PHP. Jak otrzymywać zwroty przy wysyłaniu mailii za pomoc± funkcji mail? |
Wykorzystać szansę! >>