Witam.
uczę się języka i natrafiłem na problem. robię taki mały formularzyk. w książce z której się uczę jest taki fragment kodu:
// otwarcie pliku w celu zapisania
Witam.
uczę się języka i natrafiłem na problem. robię taki mały formularzyk. w książce z której się uczę jest taki fragment kodu:
// otwarcie pliku w celu zapisania
ścieżka względna, jak sama nazwa skazuje, zależy od miejsca startu - w tym przypadku od położenia pliku, którego fragment zaprezentowałeś.
Jak w tym skrypcie wygląda zawartość zmiennej $DOCUMENT_ROOT?
czyli jak będzie ona wyglądała, bo nie za bardzo się orientuje.
no właśnie z tą zmienną też nie rozumiem do końca. została tylko nadana krótka forma… czyli
$DOCUMENT_ROOT = $_POST['DOCUMENT_ROOT'];
Hę? $DOCUMENT_ROOT wysyłany przez przeglądarkę? To jakaś pomyłka! (jeżeli nie wiesz co to $_POST to poczytaj) Takie rzeczy jak $DOCUMENT_ROOT powinny być ustawione w jakimś pliku typu config.php, żeby inne skrypty mogły je includować.
Znając życie i kanony sztuki, powinno być tak: w pliku config.php
$DOCUMENT_ROOT='C:\Program Files\Apache Group\Apache\htdocs\test'
lub równoważnie
$DOCUMENT_ROOT="C:\\Program Files\\Apache Group\\Apache\\htdocs\\test"
(jeżeli nie wiesz w czym jest różnica poczytaj) a w skrypcie który podałeś:
@$wp = fopen("$DOCUMENT_ROOT\\zamowienia.txt", 'ab');
lub
@$wp = fopen($DOCUMENT_ROOT.'\zamowienia.txt', 'ab');
ps. Zauważyłem buga w skrypcie, który podałeś:
Plik zamowienia.txt znajduje się w katalogu ‘test’ (według tego co napisałeś pod skryptem), a nie ‘zamowienia’ (tam gdzie ma wpisane fopen).
okej, zauważyłem coś takiego że na chwile obecną, po edytowaniu wiersza na podany przez Ciebie, czyli
@$wp = fopen("$DOCUMENT_ROOT\\zamowienia.txt", 'ab');
, plik tekstowy z zamówieniami pojawił się w c:\ . jak teraz zrobić by pojawiał się w folderze w którym jest reszta plików tj. formularz i skrypt php który go przetwarza? w pliku httpd.conf jest tak:
DocumentRoot "C:/Program Files/Apache Group/Apache/htdocs"
i nie rozumiem jeszcze tego do czego mnie odesłałeś, czyli z tym DOCUMENT_ROOT nie mam go przypisywać do $_POST ? nie rozumiem tego właśnie, dało by radę to jakoś po krótce wyjaśnić ? trzeba coś ruszać jeszcze coś z $DOCUMENT_ROOT oprócz tego co mam w fopen(); ?
To może tak: żeby ułatwić mi pomaganie Tobie, weź spakuj w zipa całą zawartość katalogu C:\Program Files\Apache Group\Apache\htdocs\test\ i wrzuć ja jakiś http://www.sendspace.pl/ czy http://www.wrzucaj.pl/ żebym mógł obejrzeć całość, bo na tych skrawkach informacji ciężko mi jest powiedzieć cokolwiek konstruktywnego.
okej, już rozwiązałem z tą scieżką chyba.
@ $wp = fopen("$DOCUMENT_ROOT\Program Files\Apache Group\Apache\htdocs\mysz\zamowienia.txt", 'ab');
w tym przypadku to jest ścieżka względna ?
wysłalem.
Już mam pełną jasność. (dla innych powiem tylko, że pliki dostałem na priva). W twoim skrypcie zmienna $DOCUMENT_ROOT jest niepotrzebna i należy się jej pozbyć i skazać na zapomnienie. To co napisałeś wyżej działa, bo ta zmienna jest pusta. To że w pliku httpd.conf jest DocumentRoot absolutnie nie ma wpływu na zmienne w php.
O ile dobrze Cię rozumiem, to chcesz żeby było tak:
@$wp = fopen('..\zamowienia\zamowienia.txt', 'ab');
okej, teraz wszystko super działa. Mam jeszcze ostatnie pytanie. w pliku zamówienia.txt każde zamówienie jest dopisywane w jednej linii, jak to zrobić by każde nowe było zapisywane w nowym wierszu. zmienna wygląda tak:
$ciagwyjsciowy = $date."\t".$iloscopon." Opon \t".$iloscoleju." Butelek oleju\t".$iloscswiec." Świec zapłonowych\t".$wartosc ." PLN\t". $adress. " \n";
jest tam symbol “\n” na końcu, ale w ogóle dziwnie jest odczytywany…
Zamień \t na \n lub na \r\n.
\t to znak tabulacji
\n to znak nowego wiersza
\r to znak powrotu karetki
samo \n wystarczy ale w windowsie jak to otworzysz to będzie sieczka mała, dlatego musi być \r\n. Chociaż zależy czym to otworzysz, dobry edytor tekstowy powinien poprawnie czytać samo \n.
Ogółem w unixie używa się tylko znaku końca wiersza (\n) a w windowsie obu (\r\n).
Zatem:
$ciagwyjsciowy = $date."\r\n".$iloscopon." Opon \r\n".$iloscoleju." Butelek oleju\r\n".$iloscswiec." Świec zapłonowych\r\n".$wartosc ." PLN\r\n". $adress. " \r\n";
Witam.
Ponownie pojawił się problem. Po wrzuceniu na serwer, gdy daje aby przetworzyło formularz to nie da rady zapisać tych zamówień w dokumencie tekstowym. jak się domyślam coś jest nie tak znów w tym fragmencie
@$wp = fopen('..\zamowienia\zamowienia.txt', 'ab');
.
bo na localhost normalnie tworzy dokument i wpisuje tam zamówienia.
pozdrawiam
A może na serwerze jest problem z uprawnieniami do plików i katalogów?
a jak to sprawdzić ?
normalnie to powinno utworzyć ten plik tekstowy na serwerze, tak ? jeżeli wpiszę taki kod
@$wp = fopen('..\zamowienia.txt', 'ab');
to powinno utworzyć w głównym katalogu ?
A może skasuj małpkę i zobacz jaki wypisze komunikat błędu.
W niewłaściwą stronę łamana, powinno być:
fopen(’…/zamowienia/zamowienia.txt’, …
oczywiście mają być odpowiednie uprawnienia.
po skasowaniu at nic się nie zmieniło w wyświetlanym komunikacie.
Zmiana ukośników też nie pomogła.
a jak sprawdzić te uprawnienia, lub ewentualnie zmienić je jeżeli jest możliwość ?
Witam!
Chciałem odświeżyć temat. Natknąłem się na ten sam problem, pewnie korzystaliśmy z tego samego podręcznika.
Po wpisaniu ścieżki:
@ $wp = fopen("E:/wamp/www/../zamowienia/zamowienia.txt","a",1);
otwiera plik, a po wpisaniu ścieżki:
@ $wp = fopen("$DOCUMENT_ROOT/.../zamowienia/zamowienia.txt","a",1);
wyskakuje komunikat "
Notice: Undefined variable: DOCUMENT_ROOT in E:\wamp\www\zamow\przetworzzamowienie.php on line 86
Warning: fopen(/…/zamowienia/zamowienia.txt) [function.fopen]: failed to open stream: No such file or directory in E:\wamp\www\zamow\przetworzzamowienie.php on line 86"
w phpinfo() odnalazłem informacje, że DOCUMENT_ROOT E:/wamp/www/
więc pojawiajacy się błąd jest tym mniej dla mnie logiczny.
Proszę o pomoc. Być może trzeba zmienić coś w konfiguracji. Szukam, ale nie mogę sobie z tym poradzić, a jestem początkujący.
A czy DOCUMENT_ROOT jest zmienną, czy stałą? Bo jeżeli twierdzi, że “Undefined variable: DOCUMENT_ROOT”, to może to być stała i trzeba zmienić kod na
@$wp = fopen(DOCUMENT_ROOT . "/../zamowienia/zamowienia.txt","a",1);
Nie $DOCUMENT_ROOT, a $_SERVER[‘DOCUMENT_ROOT’] ew. $_ENV[‘DOCUMENT_ROOT’]. Poza tym nie wiem czemu tak, a nie inaczej, ale nie wnikam ;].