Page 1 of 2

Externes PHP Kommando in nur einem Artikel

Posted: Sat Aug 05, 2006 9:03 pm
by Harald Weingaertner
Hallo,

ich würde mir gerne eine E-Mail senden lassen, wenn eine ganz bestimmte statische Seite in meinem Blog aufgerufen wird. Diese Funktion hatte ich auch in meiner alten Seite drin. Ich bekam dann eine Mail mit Hostnamen, Referrer, etc.

Das Plugin "Externe PHP Anwendung" geht wohl nur für alle Seiten. Hat jemand dazu eine Idee?

Re: Externes PHP Kommando in nur einem Artikel

Posted: Sat Aug 05, 2006 11:23 pm
by garvinhicking
Hi!

Am besten schreibst Du dir dafür eine PHP-Funktion, die Du in der config.inc.php deines Templates einträgst und für Smarty registrierst (siehe www.s9y.org Doku dazu):

Code: Select all

<?php
function custom_sendmail() {
    mail('no@body.de', 'testmail');
}
$serendipity['smarty']->register_function('custom_sendmail', 'custom_sendmail');

Dann installierst Du das "smarty markup" plugin und aktivierst es für die statischen Seiten.

In deiner Statischen Seite rufst Du dann einfach die Smarty Funktion per {custom_sendmail} oder so auf. Fertig. :-)

Viele Grüße,
Garvin

Posted: Sun Aug 06, 2006 12:10 am
by Harald Weingaertner
Ok, das ist die Stelle an der meine Grenzen überschritten sind ;) Das hört sich zu kompliziert für mich an :(

Ich kann nicht einfach den PHP Code der alten Seite so in den Beitrag der neuen Seite schreiben, oder? ;)

Posted: Sun Aug 06, 2006 12:14 am
by garvinhicking
Hi!
Ich kann nicht einfach den PHP Code der alten Seite so in den Beitrag der neuen Seite schreiben, oder? ;)
Probier's mal, dabei lernst Du sicher auch noch was :)

Aber was ich beschrieb ist nicht schwierig. Nicht so früh aufgeben!

Viele Grüße,
Garvin

Posted: Sun Aug 06, 2006 6:50 pm
by Harald Weingaertner
Den Code in den Artikel zu schreiben klappte nicht so richtig gut ;)

Und probiert habe ich das auch. Aber nach 20 Minuten Error500 hatte ich dann keine Lust mehr. Ich werde mich wohl in 1-2 Tagen noch einmal heranwagen...

Posted: Mon Aug 07, 2006 9:50 am
by garvinhicking
Hi!

Was hast du denn genau probiert? Was für Fehler traten genau wann und wo auf?

Error500 kann passieren wenn deine config.inc.php z.B. einen PHP parse error erzeugt?

Viele Grüße,
Garvin

Posted: Mon Aug 07, 2006 8:56 pm
by Harald Weingaertner
Wahrscheinlich disqualifiziere ich mich jetzt für die nächsten 10 Jahre, aber meine config-inc.php sah vor meinem Versuch so aus:


Code: Select all

<?php
// Be nice to the frontend users. They don't need the additional constants and file lookups. Only load them when in Admin mode.
if ($serendipity['GET']['adminModule'] == 'templates' || $serendipity['POST']['adminModule'] != 'templates') {
    // Probe for a language include with constants. Still include defines later on, if some constants were missing
    $probelang = dirname(__FILE__) . '/' . $serendipity['charset'] . 'lang_' . $serendipity['lang'] . '.inc.php';
    if (file_exists($probelang)) {
        include $probelang;
    } 
    
    include dirname(__FILE__) . '/lang_en.inc.php';
}

$template_config = array(
    array(
        'var'           => 'colorset',
        'name'          => THEME_COLORSET,
        'description'   => THEME_COLORSET_DESC,
        'type'          => 'select',
        'default'       => 'blue',
        'select_values' => array('default' => 'Default Blue', 'grey' => 'Grey Monotone', 'caramel' => 'Caramel', 'modern' => 'Modern Blue and Green')
    ),
    array(
        'var'           => 'entryfooterposition',
        'name'          => FOOTER_POSITION,
        'description'   => FOOTER_POSITION_DESC,
        'type'          => 'radio',
        'radio'         => array('value' => array('true', 'false'),
                                 'desc'  => array(SMALL_BOX, BELOW_ENTRY)),
        'default'       => 'true',
    ),
    array(
        'var'           => 'navlink1text',
        'name'          => NAV_LINK_TEXT . ' 1',
        'description'   => NAV_LINK_DESC,
        'type'          => 'string',
        'default'       => NAV_DEFAULT_1,
    ),
    array(
        'var'           => 'navlink1url',
        'name'          => NAV_LINK_URL . ' 1',
        'description'   => NAV_LINK_URL_DESC,
        'type'          => 'string',
        'default'       => '#',
    ),
    array(
        'var'           => 'navlink2text',
        'name'          => NAV_LINK_TEXT . ' 2',
        'description'   => NAV_LINK_DESC,
        'type'          => 'string',
        'default'       => NAV_DEFAULT_2,
    ),
    array(
        'var'           => 'navlink2url',
        'name'          => NAV_LINK_URL . ' 2',
        'description'   => NAV_LINK_URL_DESC,
        'type'          => 'string',
        'default'       => '#',
    ),
    array(
        'var'           => 'navlink3text',
        'name'          => NAV_LINK_TEXT . ' 3',
        'description'   => NAV_LINK_DESC,
        'type'          => 'string',
        'default'       => NAV_DEFAULT_3,
    ),
    array(
        'var'           => 'navlink3url',
        'name'          => NAV_LINK_URL . ' 3',
        'description'   => NAV_LINK_URL_DESC,
        'type'          => 'string',
        'default'       => '#',
    ),
    array(
        'var'           => 'navlink4text',
        'name'          => NAV_LINK_TEXT . ' 4',
        'description'   => NAV_LINK_DESC,
        'type'          => 'string',
        'default'       => NAV_DEFAULT_4,
    ),
    array(
        'var'           => 'navlink4url',
        'name'          => NAV_LINK_URL . ' 4',
        'description'   => NAV_LINK_URL_DESC,
        'type'          => 'string',
        'default'       => '#',
    ),
    array(
        'var'           => 'navlink5text',
        'name'          => NAV_LINK_TEXT . ' 5',
        'description'   => NAV_LINK_DESC,
        'type'          => 'string',
        'default'       => NAV_DEFAULT_5,
    ),
    array(
        'var'           => 'navlink5url',
        'name'          => NAV_LINK_URL . ' 5',
        'description'   => NAV_LINK_URL_DESC,
        'type'          => 'string',
        'default'       => '#',
    ),
);
und nach meinem Versuch so: (ich habe einfach meinen Kram unten mit hinzugefügt)

Code: Select all

<?php
// Be nice to the frontend users. They don't need the additional constants and file lookups. Only load them when in Admin mode.
if ($serendipity['GET']['adminModule'] == 'templates' || $serendipity['POST']['adminModule'] != 'templates') {
    // Probe for a language include with constants. Still include defines later on, if some constants were missing
    $probelang = dirname(__FILE__) . '/' . $serendipity['charset'] . 'lang_' . $serendipity['lang'] . '.inc.php';
    if (file_exists($probelang)) {
        include $probelang;
    } 
    
    include dirname(__FILE__) . '/lang_en.inc.php';
}

$template_config = array(
    array(
        'var'           => 'colorset',
        'name'          => THEME_COLORSET,
        'description'   => THEME_COLORSET_DESC,
        'type'          => 'select',
        'default'       => 'blue',
        'select_values' => array('default' => 'Default Blue', 'grey' => 'Grey Monotone', 'caramel' => 'Caramel', 'modern' => 'Modern Blue and Green')
    ),
    array(
        'var'           => 'entryfooterposition',
        'name'          => FOOTER_POSITION,
        'description'   => FOOTER_POSITION_DESC,
        'type'          => 'radio',
        'radio'         => array('value' => array('true', 'false'),
                                 'desc'  => array(SMALL_BOX, BELOW_ENTRY)),
        'default'       => 'true',
    ),
    array(
        'var'           => 'navlink1text',
        'name'          => NAV_LINK_TEXT . ' 1',
        'description'   => NAV_LINK_DESC,
        'type'          => 'string',
        'default'       => NAV_DEFAULT_1,
    ),
    array(
        'var'           => 'navlink1url',
        'name'          => NAV_LINK_URL . ' 1',
        'description'   => NAV_LINK_URL_DESC,
        'type'          => 'string',
        'default'       => '#',
    ),
    array(
        'var'           => 'navlink2text',
        'name'          => NAV_LINK_TEXT . ' 2',
        'description'   => NAV_LINK_DESC,
        'type'          => 'string',
        'default'       => NAV_DEFAULT_2,
    ),
    array(
        'var'           => 'navlink2url',
        'name'          => NAV_LINK_URL . ' 2',
        'description'   => NAV_LINK_URL_DESC,
        'type'          => 'string',
        'default'       => '#',
    ),
    array(
        'var'           => 'navlink3text',
        'name'          => NAV_LINK_TEXT . ' 3',
        'description'   => NAV_LINK_DESC,
        'type'          => 'string',
        'default'       => NAV_DEFAULT_3,
    ),
    array(
        'var'           => 'navlink3url',
        'name'          => NAV_LINK_URL . ' 3',
        'description'   => NAV_LINK_URL_DESC,
        'type'          => 'string',
        'default'       => '#',
    ),
    array(
        'var'           => 'navlink4text',
        'name'          => NAV_LINK_TEXT . ' 4',
        'description'   => NAV_LINK_DESC,
        'type'          => 'string',
        'default'       => NAV_DEFAULT_4,
    ),
    array(
        'var'           => 'navlink4url',
        'name'          => NAV_LINK_URL . ' 4',
        'description'   => NAV_LINK_URL_DESC,
        'type'          => 'string',
        'default'       => '#',
    ),
    array(
        'var'           => 'navlink5text',
        'name'          => NAV_LINK_TEXT . ' 5',
        'description'   => NAV_LINK_DESC,
        'type'          => 'string',
        'default'       => NAV_DEFAULT_5,
    ),
    array(
        'var'           => 'navlink5url',
        'name'          => NAV_LINK_URL . ' 5',
        'description'   => NAV_LINK_URL_DESC,
        'type'          => 'string',
        'default'       => '#',
    ),
);

$domain = "internetpolizei.de";
$docroot = "http://www.internetpolizei.de";
$emailaddress = "homepage@internetpolizei.de";
function send_email()
  {
   global $REQUEST_URI, $HTTP_REFERER, $emailaddress, $REMOTE_ADDR, $docroot, $HTTP_CLIENT_IP, $HTTP_USER_AGENT, $HOST, $IP;
$r_hostname = gethostbyaddr($REMOTE_ADDR);
   $today = getdate(); 
   $month = $today[mon]; 
   $mday = $today[mday]; 
   $year = $today[year]; 
   $hours = $today[hours];
   $minutes = $today[minutes];
   $errortime = "$mday.$month $year um $hours:$minutes"; 
   $message .= "Besucher auf internetpolizei.de (www.internetpolizei.de)\n\nAm: $errortime.\n\n";
   $message .= "Referer: $HTTP_REFERER\n\n";
   $message .= "IP: $REMOTE_ADDR via $HTTP_CLIENT_IP\n\n";
   $message .= "HTTP_USER_AGENT: $HTTP_USER_AGENT\n\n";
   $message .= "HOST: $HOST $r_hostname\n\n";
   mail("$emailaddress", "Besucher auf internetpolizei.de", $message, "From: $emailaddress");
   return;
  }
send_email();  
Das kann wahrscheinlich gar nicht gehen... :( Irgendwie fehlt ja noch so eni 'smarty' Kommando und ich verstehe nicht wieso kein schließendes ?> mehr kommt. Das kenne ich so :| Naja... Dafür kann ich halt andere Sachen ;)

Posted: Tue Aug 08, 2006 11:10 am
by garvinhicking
Hi!

Probier doch mal dies:

http://nopaste.php-q.net/231061

Das enthält quasi das, was ich Dir ursprünglich schickte, mit der 'register_function'. Das hast Du nicht eingefügt.

In deiner Template-Datei musst Du dann auch noch wie erwähnt {send_email} einfügen.

Viele Grüße,
Garvin

Posted: Tue Aug 08, 2006 11:34 am
by Harald Weingaertner
Hallo Garvin,

vielen Dank für deine Hilfe. So ganz funktioniert es noch nicht, denn sobald ich diesen Code für die config.inc.php benutze, werden statische Seiten gar nicht mehr angezeigt. Es kommt nur eine weiße Seite. Dabei spielt es keine Rolle, ob ich das {send_email} in den Artikel schreibe oder nicht.

Das ist aber auf jeden Fall schonmal besser als ein Fehler500 auf allen Seiten ;)

Kann das dann ein Fehler im Blog sein, dass nach dem Code keine statischen Seiten mehr angezeigt werden?

Viele Grüße, Harald

Posted: Tue Aug 08, 2006 11:35 am
by garvinhicking
Hi!

Probier mal die ocnfig.inc.php per browser aufzurufen: http://deinhost/pfad/templates/deintemp ... ig.inc.php

und schau ob dort Fatal PHP Errors kommen? Eine leere Seite heißt oft, dass ein Parse Error in einer PHP Datei (der config) vorliegt.

Viele Grüße,
Garvin

Posted: Tue Aug 08, 2006 5:11 pm
by Harald Weingaertner
Ich musste zuerst die .htaccess Datei umbenennen, weil ich sonst nicht das Recht hatte die Datei aufzurufen. Beim Aufrufen kommt aber:

Fatal error: Call to a member function on a non-object in /home/www//templates/smallbiz01/config.inc.php on line 119

Und Zeile 119 sieht so aus: (die letzte, fette Zeile und so hört die Datei auch auf. Nach Zeile 119 kommt noch ein Return und Ende)

function send_email() {
$emailaddress = "homepage@internetpolizei.de";

$r_hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$today = getdate();
$month = $today['mon'];
$mday = $today['mday'];
$year = $today['year'];
$hours = $today['hours'];
$minutes = $today['minutes'];
$errortime = "$mday.$month $year um $hours:$minutes";
$message .= "Besucher auf internetpolizei.de (www.internetpolizei.de)\n\nAm: $errortime.\n\n";
$message .= "Referer: {$_SERVER['HTTP_REFERER']}\n\n";
$message .= "IP: {$_SERVER['REMOTE_ADDR']} via {$_SERVER['HTTP_CLIENT_IP']}\n\n";
$message .= "HTTP_USER_AGENT: {$_SERVER['HTTP_USER_AGENT']}\n\n";
$message .= "HOST: {$_SERVER['REMOTE_ADDR']} $r_hostname\n\n";
mail("$emailaddress", "Besucher auf internetpolizei.de", $message, "From: $emailaddress");
return true;
}

$serendipity['smarty']->register_function('send_email', 'send_email');



Das Smarty Plugin habe ich installiert. Falls du noch eine Idee hast, dann wäre es prima.

Gruß, Harald

Posted: Wed Aug 09, 2006 10:21 am
by garvinhicking
Hi!

Das ist gut, das heißt dass die config.inc.php keine parse-errors enthält.

Upgrade mal auf das aktuellste Nightly, wenn du die 1.1 versionen einsetzt. Da gab es vor einer Woche einen Fix der damit zusammenhängen könnte.

Grüße,
Garvin

Posted: Wed Aug 09, 2006 4:21 pm
by Harald Weingaertner
Hallo Garin,

ich habe akualisiert, leider bleiben die statischen Seiten weiterhin leer.

Im Quelltext der leeren Seite steht nur

<!-- ENTRIES START -->

Viele Grüße, Harald

Posted: Wed Aug 09, 2006 4:24 pm
by garvinhicking
Hi!

Wie hast Du denn deine Templates modifiziert? Wechsel mal auf das unmodifizierte Default-Template testweise.

Grüße,
garvin

Posted: Wed Aug 09, 2006 5:14 pm
by garvinhicking
Hi!

Ich glaube es gibt doch einen fehler in der config.inc.php.

Änder die Funktion mal in:

Code: Select all

function send_email($params, &$smarty) {
}
Sprich, Du fügst ein $params, &$smarty in den Funktionskopf mit ein, Smarty braucht das.