99% CPU-Last bei aktiviertem UrlRewriting

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

99% CPU-Last bei aktiviertem UrlRewriting

Beitrag von Screeze » 02.10.2009, 15:09:03

Dieses Thema wurde aus dem Thread urlRewriting abgetrennt.

hmm ich hab jetzt nach deinem tipp mit den lokalen vhosts diese mal eingerichtet, und versucht urlrewriting zu aktivieren.

ich bin nach dem artikel auf der APF seite gegangen.
also, erstmal htaccess erstellt.
dann hab ich mal spasseshalber versucht rumzusurfen auf meiner seite, das klappe noch problemlos.

Dann hab ich in die index.php direkt nach den import befehlen die zeilen

Code: Alles auswählen

$Reg = &Singleton::getInstance('Registry');
$Reg->register('apf::core','URLRewriting',true);
reingepackt.
Jetzt wollte ich die seite wieder aufrufen.
resultat: apache ist sofort bei >90% cpu auslastung, und die seite läd sich einen ast ab.

error logs zeigen keine einträge zu dem zeitpunkt.
Woran kann das liegen?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: urlRewriting

Beitrag von dr.e. » 02.10.2009, 21:12:27

Hi,

das hört sich nach einer Endlos-Schleife an. Ich vermute bei den Apache Redirects. Kannst du mal deine Verzeichnis-Struktur + die htaccess posten? So kann ich nur vermuten.
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: urlRewriting

Beitrag von Screeze » 02.10.2009, 21:18:31

/xampp/APF/
darin sind core, config, sites, tools, mytools, extensions,...

/xampp/htdocs/APF/sites/GAMEmainpage/
mit index.php, ajax.php, .htaccess

Code: Alles auswählen

# Aktivierung von mod_rewrite
RewriteEngine on

# Ausschluss definierter Verzeichnisse von der RewriteRule
RewriteCond %{REQUEST_URI} !^(\/frontend) [NC]

# Definition der RewriteRule. Alle Anfragen ausser den ausgenommenen
# Dateien werden auf die index.php weitergeleitet
RewriteRule !(index\.php|ajax\.php|\.css|\.jpe?g|\.png|\.gif|\.ico)$ /index.php?query=%{REQUEST_URI}&%{QUERY_STRING} [NC,L]
ist original die von der APF seite, bis auf dass ich noch ajax.php ausgenommen hab, aber das hat auch vorher schon nicht funktioniert, bevor ich die ajax.php da rein hab.

Außerdem hab ich jetzt den vhost "main.game" eingerichtet, der direkt auf
/xampp/htdocs/APF/sites/GAMEmainpage/
zeigt.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: urlRewriting

Beitrag von dr.e. » 02.10.2009, 21:31:55

Hallo Screeze,

der Code an sich sieht gut aus. Kannst du deine komplette index.php und die URL, die du aufrufst posten? Parallel dazu würde ich mal versuchen - sofern du den Page-Controller nutzt -, nur mal die Seite erstellen zu lassen und das transformieren auszukommentieren. Im Fall des Front-Controllers initialisieren, aber nicht starten. Vielleicht läuft das bis dahin. Sollte das nicht helfen, müssen wir das single-step debuggen oder ein Rewrite-Log mit dem Apache schreiben.
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: urlRewriting

Beitrag von Screeze » 02.10.2009, 21:35:41

Code: Alles auswählen

<?php
// Turn off errors
ini_set('html_errors','off');
session_cache_limiter('none');

// include PageController
require_once($_SERVER['DOCUMENT_ROOT'] . '/../../../../APF/core/pagecontroller/pagecontroller.php');
import('modules::usermanagement::biz','umgtManager');
import('core::frontcontroller','Frontcontroller');
import('core::singleton','SessionSingleton');
$Reg = &Singleton::getInstance('Registry');
$Reg->register('apf::core','URLRewriting',true);
$fC = &Singleton::getInstance('Frontcontroller');
$fC->set('Context','sites::GAMEmainpage');
$fC->registerAction('mytools::userSessionManager::biz','usmCheckAction');
$fC->registerAction('mytools::ipLogger::biz','ipLoggerAction');
$fC->start('sites::GAMEmainpage::pres::templates','index');

?>

url:
http://main.game/index.php
Im Fall des Front-Controllers initialisieren, aber nicht starten. Vielleicht läuft das bis dahin.
Ja bis dahin läufts.... (weiße seite, aber sie läd nicht endlos)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: urlRewriting

Beitrag von dr.e. » 02.10.2009, 21:38:50

Hi,

versuche mal die Actions rauszunehmen und nur ein einziges Template (ohne weitere Includes) als Haupt-Template zu laden. Sollte das geht, nimm diese Schrittweise wieder rein. Mehr fällt mir nicht wirklich ein. Du könntest parallel dazu nochmal mit einem

Code: Alles auswählen

wget -vdS http://url.com
den Aufruf testen, ob du einen 30x-Status bekommst. Dies könnte eine HTTP-Rewrite-Endlos-Schleife bedeuten.
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: urlRewriting

Beitrag von Screeze » 02.10.2009, 21:44:50

Danke für den tipp...
konnte es auf mein menümodul eingrenzen.. mal sehen woran genau....

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: urlRewriting

Beitrag von Screeze » 02.10.2009, 21:56:00

hmm
ich glaub es liegt an der linkgenerierung.

Code: Alles auswählen

$Template__Element->setPlaceHolder("url", linkHandler::generateLink($node['url'], $node['param']));
wenn rewrite off ist, sieht ein generierter link in etwa so aus:
"index.php?page=home"

wenn rewrite on ist, so:
"/page/home"

Ist das normal dass da die indexdatei vornedran fehlt?

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: urlRewriting

Beitrag von dr.e. » 02.10.2009, 22:00:55

Hi,

die URLRewrite-Links werden immer ohne "index.php" oder die zuständige Bootstrap-Datei generiert. Das ist auch korrekt so. Nach Aufruf des Input-Filter stehen diese Parameter im $_REQUEST wieder als page=home zur Verfügung. Was passiert denn beim Aufruf der Rewrite-URL?
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: urlRewriting

Beitrag von Screeze » 02.10.2009, 22:11:04

hmm nichts problematisches :D
eigentlich wird die url ja auch nicht aufgerufen, sondern nur in ein template geschrieben, und dieses stellt eine normale verlinkung dar... deswegen bin ich etwas verwundert...

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: urlRewriting

Beitrag von Screeze » 02.10.2009, 22:17:28

hmm
ich befinde mich im controller des templates.

Code: Alles auswählen

function transformContent(){
      $sSM = &$this->__getServiceObject('mytools::screezeSimpleMenu::biz','screezeSimpleMenu');
      $nodes = $sSM->getnodes();
      $Template__Wrapper = &$this->__getTemplate('wrapper');
      
      $elements = "";
      foreach($nodes as $node){
          
          $Template__Element = &$this->__getTemplate('element');
          $Template__Element->setPlaceHolder("url", linkHandler::generateLink($node['url'], $node['param']));
          $Template__Element->setPlaceHolder("attributes", $node['attributes']);
          $Template__Element->setPlaceHolder("content", $node['content']);
          $elements .= $Template__Element->transformTemplate();
          
      }
      $Template__Wrapper->setPlaceHolder('elements', $elements);

      $Template__Wrapper->transformOnPlace();

  }
Das funktioniert nicht.
Wenn ich eine dieser beiden zeilen:

Code: Alles auswählen

$Template__Wrapper->setPlaceHolder('elements', $elements);

      $Template__Wrapper->transformOnPlace();
auskommentiere, funktioniert es, bis auf dass das menü nicht angezeigt wird.
Wenn ich aber echo $elements einfüge, funktioniert es auch, das menü wird halt ganz oben angezeigt, aber korrekt:
<li>
<a href='/page/home' >

Startseite

</a>
</li>

<li>
<a href='/page/register_frm' >

Register

</a>

</li>

<li>
<a href='/page/impressum' >

Impressum

</a>
</li>
Das ist die gesamte template datei:

Code: Alles auswählen

<@controller namespace="mytools::screezeSimpleMenu::pres::controller" file="screezeSimpleMenu_v1_controller"
class="screezeSimpleMenu_v1_controller" @>

<html:template name="wrapper">
    <ul>
        <template:placeholder name="elements" />
    </ul>
</html:template>

<html:template name="element">
    <li>
        <a href='<template:placeholder name="url" />' <template:placeholder name="attributes" />>
        <template:placeholder name="content" />
        </a>
    </li>
</html:template>
Wo ist jetzt der fehler?


edit:
wenn ich nur die vorletzte zeile ÄNDERE

Code: Alles auswählen

$Template__Wrapper->setPlaceHolder('elements', 'test');
funktioniert es und es steht test wo es transformiert wird...

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: urlRewriting

Beitrag von Screeze » 02.10.2009, 22:27:49

ich habe die zeile jetzt nochmal ausgetauscht. zuerst:

Code: Alles auswählen

$Template__Wrapper->setPlaceHolder('elements', "<li>
<a href='/page/home' >

Startseite

</a>
</li>

<li>
<a href='/page/register_frm' >

Register

</a>

</li>

<li>
<a href='/page/impressum' >

Impressum

</a>
</li>");

Klappt NICHT.
dann hab ich auf das hier eingegrenzt:

Code: Alles auswählen

$Template__Wrapper->setPlaceHolder('elements', "<li>
<a href='/page/home' >

Startseite

</a>
</li>
");

klappt ebenfalls nicht.

Code: Alles auswählen

$Template__Wrapper->setPlaceHolder('elements', "<li>
a href='/page/home' >

Startseite

</a>
</li>
");

DAS KLAPPT!
es ist nur 1 änderung drinnen:
ich habe die öffnende klammer < des links entfernt..
????? *ratlos* :?: :shock: :o :oops:

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: urlRewriting

Beitrag von dr.e. » 02.10.2009, 23:07:10

Hi,

wie gesagt, hier hilft nur noch

a) eine Nacht drüber schlafen ;)
b) single step debugger

Schau mal unter Debugging with Netbeans und How to configute xdebug. Damit solltest du das Setup hinbekommen.
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: urlRewriting

Beitrag von Screeze » 03.10.2009, 12:10:29

jetz weis ich wieder woran ich gescheitert bin letztes mal :D
ich hab zum verrecken nicht die richtige xdebug dll gefunden...
http://xdebug.org/download.php
Xdebug 2.0.5
Release date: 2009-07-03

* source
* Windows binaries: 5.2 VC6 Non-thread-safe (32 bit), 5.2 VC6 (32 bit), 5.3 VC6 Non-thread-safe (32 bit), 5.3 VC6 (32 bit), 5.3 VC9 Non-thread-safe (64 bit), 5.3 VC9 Non-thread-safe (32 bit), 5.3 VC9 (64 bit), 5.3 VC9 (32 bit)
die version 5.2 VC6 Non-thread-safe (32 bit) bringt fehler "php5.[endung grad vergessen]" wurde nicht gefunden.
die version 5.2 VC6 (32 bit) verhindert den start des apache, error.log :
PHP Fatal error: [Zend Optimizer] Zend Optimizer 3.3.3 is incompatible with Xdebug 2.0.5 in Unknown on line 0
5.3 VC6 (32 bit) zeigt keine wirkung.

ich hab php 5.2.8 und xampp 1.7.0... welche von den dreckdingern brauch ich denn??

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: urlRewriting

Beitrag von dr.e. » 03.10.2009, 14:02:14

Hi,

beim XAMPP ist der Zend Optimizer dabei. Diesen musst du deaktivieren. Ich habe lokal Xdebug einmal in der Version 2.0.4-X (Datei: php_xdebug-2.0.2-4.4.6.dll, PHP 4.4.8.X) und (Datei: php_xdebug-2.0.4-5.2.8.dll, PHP 5.2.10) installiert.

Unter http://www.apachefriends.org/de/xampp-windows.html#628 findest du auch ein Paket mit PHP5.3 und Xdebug direkt integriert. Schau mal, ob dein Paket die Libs nicht auch schon dabei hat.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast