Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

1

30.06.2015, 20:06

[Solved] PHP Router, auf Server keine Ausgabe und kein Fehler

Guten Abend,

ich schreibe gerade ein PHP Framework um meine Webseiten RESTful zu machen.
Der Router dafür funktioniert bei mir lokal wunderbar. Wenn ich allerdings die Seite auf meinen Server schiebe passiert einfach nichts. Es wird kein Fehler angezeigt und auch kein Quellcode ausgegeben. Woran kann das liegen?

Damit das Framework arbeiten kann muss ein Basispfad und ein root Pfad gesetzt werden. Der Basispfad beim Router wird zum Auflösen der URL genutzt, also alles ist relative zu mb/test. Der root Pfad wird genutzt um die Klassen automatisch zu laden (FLIMSY_ROOT).

Die htaccess einzeln getestet funktioniert.

So sieht die index.php aktuell auf dem Server aus:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
define('FLIMSY_ROOT', '../flimsy');

require_once '../flimsy/flimsy.php';
require_once 'autoload.php';

function exception($e){
    print $e->getCode().': '.$e->getMessage();
    exit;
}

// setup router
$router = new Router('mb/test');

$router->when('/:welcome?/:nr?',
              array('GET'),
              new HomeController(new HomeView()));

$router->when('/about/',
              array('GET'),
              new AboutController(new AboutView()));

$router->when('/form',
              array('POST'),
              new FormController());

$router->when('/404',
              array('GET'),
              new Error404Controller());

$router->otherwise('/404');

try{
    $router->resolve();
}
catch(RouterPathException $e){
    exception($e);
}
catch(RouteUnresolvedException $e){
    exception($e);
}
catch(RouteUnacceptedRequestException $e){
    exception($e);
}
?>

Den Router könnt ihr euch direkt anschauen. Ist alles kommentiert...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (04.07.2015, 00:02)


Architekt

Community-Fossil

Beiträge: 2 481

Wohnort: Hamburg

Beruf: Student

  • Private Nachricht senden

2

30.06.2015, 20:17

Lokal ist es meist egal ob die Ordner Groß- oder kleingeschrieben sind. Kann es daran liegen? Ansonsten error_reporting(E_ALL); mal ausprobieren. ;) Sollte man sowieso immer haben.
Der einfachste Weg eine Kopie zu entfernen ist sie zu löschen.
- Stephan Schmidt -

Tobiking

1x Rätselkönig

  • Private Nachricht senden

3

30.06.2015, 20:19

Es kommt Status 500. Da wird irgendwo ein Fehler im Code auftreten. Also entweder PHP Fehlerausgabe auf deinem Server aktivieren oder in die error Logs gucken.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

4

30.06.2015, 20:26

error_reporting(E_ALL); trotzdem keine Ausgabe...

Den 500 habe ich wegbekommen indem ich die Dateiberechtigungen geändert hab, zumindest blinkt der nur kurz auf aber bleibt nicht stehen in Chrome.

Kann es evt. doch an der htaccess liegen?

Quellcode

1
2
3
4
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]


[Edit] Nope der 500 ist immer noch da, nur dauerts lange bis er kommt.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

5

30.06.2015, 20:41

Strato erlaubt kein mod_rewrite... geil.

[Edit] Schon wieder getäuscht, siehe hier

Hat jemand Lust das Framework mal bei sich zu testen? Es muss nur die Index kurz angepasst werden, einfach beide Ordner (also flimsy und test) aus dem src Verzeichnis hochladen...

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

6

30.06.2015, 22:28

Es hat irgendswas mit den require_once in den autoload Funktionen zu tun...
Einfaches umleiten per htaccess funktioniert.

Keiner eine Idee?

7

30.06.2015, 23:08

Unter nginx funktionierts bei mir. Benutzt du die htaccess aus dem Repo? Schon mal RewriteBase eingebaut?
"Theory is when you know something, but it doesn’t work. Practice is when something works, but you don’t know why. Programmers combine theory and practice: Nothing works and they don’t know why." - Anon

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

8

30.06.2015, 23:09

Ist der ../flimsy Pfad eventuell aus Sicherheitsgruenden blockiert? Ich erinnere mich da gab es einige optionen um zu verhindern, dass Dateien ausserhalb des document root ordners eingebunden werden duerfen.

PS: Je nach config wird dir error reporting die Fehler in die server log file packen, nicht in die Browserausgabe.

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

9

30.06.2015, 23:39

Unter nginx funktionierts bei mir. Benutzt du die htaccess aus dem Repo? Schon mal RewriteBase eingebaut?

Jup die htaccess. RewriteBase hilft auch nicht.


Ist der ../flimsy Pfad eventuell aus Sicherheitsgruenden blockiert? Ich erinnere mich da gab es einige optionen um zu verhindern, dass Dateien ausserhalb des document root ordners eingebunden werden duerfen.

PS: Je nach config wird dir error reporting die Fehler in die server log file packen, nicht in die Browserausgabe.

Hmm könnte sein.

Aber ich hab ein ganz komisches Problem, folgendes funktioniert nicht, beide Dateien in einem Ordner (keine htaccess):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
// index.php
<?php
require_once 'Foo.php';
?>

// Foo.php
<?php
class Foo{
    function out(){
        print 'works!';
    }
}
?>

Dateiberechtigungen sind gesetzt. Vielleicht ist ja doch der Server schuld?

[Edit] Hmm keine Ahnung, ich glaube ich habe die Pfade beim require_once falsch, dieses müssen immer relativ zur aktuellen Datei sein.
Folgendes funktioniert jetzt (aber auch erst nach ein paar Minuten, updated Apache wohl nicht sofort?):

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// index
<?php
require_once 'lib/inc.php';

$foo = new Foo();
$foo->out();
?>

// lib/Foo.php
<?php
class Foo{
    function out(){
        print 'asdf';
    }
}
?>

// lib/inc.php
<?php
function l($class){
    require_once $class.'.php';
}

spl_autoload_register('l');
?>

Aber mein Framework nicht... ich checks nicht.

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »DeKugelschieber« (30.06.2015, 23:59)


DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

10

04.07.2015, 00:01

Solved:

Quellcode

1
2
3
4
5
Options +FollowSymLinks // <-
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L]

Test:

Start
Start, mit optionalen Parametern
Auf der Startseite könnt ihr post anklicken, der Router fängt dort nur POST requests ab (einfach mal testen indem ihr direkt die URL eingebt). Wechel funktioniert auch :)

Mal sehen wann mein Framework fertig ist, ich finds schon ganz nett. Vor allem konnte ich nichts vergleichbares (vernünftiges, sauber dokumentiert, ...) finden.

Werbeanzeige