Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Przesiadka z kodem na Linuxa
Forum PHP.pl > Forum > PHP
onlyX
Witam!

Na wirtualnej maszynie postawiłem sobie Apacha z php5 i MySQL i próbuję przenieść na niego kod mojej aplikacji z localhosta pod Winodwsem.
Jednak się sypie. Korzystam w ModRewrite do przekierowania wszystkich adresów poza pewnymi katalogami na index.php:
  1. <?php
  2. RewriteEngine On
  3. RewriteRule !(^include/|^pics/|^templates) index.php
  4. ?>

jednak po wywołaniu adresów typu http://192.168.1.160/collector/item/1 wyświetla się pusta strona

natomiast na innych podstronach wywołuje mi błędy w funcjach, które pod Win nie sprawiają, żadnych problemów, dla przykładu:
  1. <?php
  2. Fatal error: Call to a member function makeURL() on a non-object in /var/www/collector/register.php on line 62
  3. ?>


Nie jestem zbyt obeznany z linuxem, to moje początki z tym systemem. Wydaje mi się że mod_rewrite jest uruchomiony, ale 100% pewności nie mam. Poza tym pozostałe błędy nie są chyba tym wywołane.

Jeśli ktoś ma pomysł dlaczego tak się dzieje, co mogłem pominąć w instalacji albo czego brakuje w configach, byłbym bardzo wdzięczny za sugestie.

pozdrawiam
Tomek.
artur_dziocha
sprawdź w phpinfo
bodajże ukośniki idą inaczej w Windows a inaczej w Linuksie
Linux ma slash, a Windows backslash

w terminalu a2enmod rewrite
onlyX
  1. debian:/media/driver# a2enmod rewrite
  2. ERROR: Module rewrite not properly enabled: /etc/apache2/mods-enabled/rewrite.load is a real file, not touching it

ok, więc jak poprawnie dodać mod_rewrite do Apacha2
httpd.conf mam czysty
a w apache2.conf nie ma nic o rozszerzeniach, a już na pewno nie ma długiej listy z zakomentowanymi modułami

nie bardzo wiem czego mam szukać w phpinfo()? w całej aplikacji wszędzie używam slashy /


dodam, że mój system to Debian, a apacha2 i całą resztę instalowałem przez apt-get
dadexix
by wyeliminować że mod_rewrite nie działa zrób prostą regułę

Kod
RewriteRule abc.php index.php


wywyłaj abc.php i się dowiesz

btw. na obydwóch systemach masz tę samą wersje apache i php? możesz mieć starszą lub np. na jednym apache 2.x a na drugim 1.3
artur_dziocha
a2enmod rewrite tą komende wydajesz jako root??
instalowałeś to wszystko -
Kod
apt-get install apache2 php5 php-pear mysql-server-5.0 php5-mysql


Cytat
Podpowiem jednak iz mod_rewrite ni ma nic wspolnego z PHP i w phpinfo() nie znajdziesz nic ciekawego na ten temat...

A Loaded Modules w phpinfo()??Jest dział apache2handler
Kod
etc/apache2/sites-available/default
tutaj edytujesz ustawienia serwera hosta(heh)
pozniej w terminalu jako root /etc/init.d/apache2 restart
Wypróbuj
Kildyt
Nie znajdziesz modułu mod_rewrite w standardowym apache. Najlepiej jak zainstalujesz sobie xampp-a. Od razu masz tam phpmyadmin i GD.
Zyx
Kildyt -> mod_rewrite jest częścią źródeł Apache'a, więc ciężko, żeby go nie było... co najwyżej może być wyłączony, ale jest obecny w "standardowym" Apache. Xampp nie jest nikomu do szczęścia potrzebny, zwłaszcza pod Linuksem (a tego dotyczy temat). Czysty PHP też ma GD i się nie chwali, a instalacja phpMyAdmina to kwestia rozpakowania archiwum i zmiany nazwy jednego pliku... nic trudnego.

Wracając do tematu... pod systemami uniksowymi musisz patrzeć na kilka istotnych różnic:

1. W ścieżkach występują slashe i powinno się podczas programowania używać tylko ich.
2. Żadnych liter dysków.
3. Systemy uniksowe rozróżniają wielkość liter! Request.php oraz request.php to dwa różne pliki.
4. Inny system uprawnień.
5. Skrypt PHP będzie Ci się wykonywać z prawami jakiegoś użytkownika. Jeśli PHP doinstalowany jest do Apache'a jako moduł serwera, będzie on pracować na prawach serwera, a nie Twoich i objawi się to przy próbie stworzenia jakiegoś pliku przy PHP. Konieczne jest także nadanie odpowiednio dużych uprawnień, ale widzę, że z tym sobie poradziłeś na tyle, by skrypt zaczął się wykonywać. Rozwiązaniem jest FastCGI, ale pod Apache jest to cholernie ciężkie do skonfigurowania (wina leży w module mod_fastcgi, który jest jakiś lewy - próbowałem już co najmniej kilka razy i nigdy nie działało, tymczasem w Lighttpd wychodzi za pierwszym razem).

Kwestie systemu plików nie tłumaczą do końca, dlaczego dostajesz błąd wywoływania metody na nieistniejącym obiekcie. W normalnym skrypcie to nie powinno mieć miejsca. Gdyby był problem z wczytaniem jakiegoś pliku, dostałbyś albo Fatal error z informacją o braku dostępu, albo jakieś ostrzeżenia, że nie można otworzyć pliku. Problem moim zdaniem leży więc gdzieś w tym, że Twój skrypt zawiera jakieś dziwne instrukcje, które bazują dość mocno na jakiejś właściwości Windowsa. Przez brak odpowiedniej obsługi błędów albo pominięcie jakiegoś warunku w warunkach uniksowych nie tworzy on jakiegoś obiektu i efekt widać.
onlyX
Dzięki za spory odzew. Rozwiązałem problem.
Problem tkwił w złej konfiguracji w
  1. etc/apache2/sites-available/default

and the winner is: Zyx

Dzięki wielkie dla wszystkich za wskazówki.
Kildyt
Cytat(Zyx @ 17.04.2009, 08:01:13 ) *
Kildyt -> mod_rewrite jest częścią źródeł Apache'a, więc ciężko, żeby go nie było... co najwyżej może być wyłączony, ale jest obecny w "standardowym" Apache. Xampp nie jest nikomu do szczęścia potrzebny, zwłaszcza pod Linuksem (a tego dotyczy temat). Czysty PHP też ma GD i się nie chwali, a instalacja phpMyAdmina to kwestia rozpakowania archiwum i zmiany nazwy jednego pliku... nic trudnego.

No tak, teraz muszę płacić za swoją niewiedze. Dzięki za info. winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.