Externes PHP Kommando in nur einem Artikel

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Harald Weingaertner
Regular
Posts: 474
Joined: Mon Mar 27, 2006 12:32 am

Externes PHP Kommando in nur einem Artikel

Post 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?
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: Externes PHP Kommando in nur einem Artikel

Post 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
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Harald Weingaertner
Regular
Posts: 474
Joined: Mon Mar 27, 2006 12:32 am

Post 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? ;)
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post 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
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Harald Weingaertner
Regular
Posts: 474
Joined: Mon Mar 27, 2006 12:32 am

Post 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...
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post 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
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Harald Weingaertner
Regular
Posts: 474
Joined: Mon Mar 27, 2006 12:32 am

Post 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 ;)
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post 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
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Harald Weingaertner
Regular
Posts: 474
Joined: Mon Mar 27, 2006 12:32 am

Post 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
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post 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
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Harald Weingaertner
Regular
Posts: 474
Joined: Mon Mar 27, 2006 12:32 am

Post 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
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post 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
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Harald Weingaertner
Regular
Posts: 474
Joined: Mon Mar 27, 2006 12:32 am

Post 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
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post by garvinhicking »

Hi!

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

Grüße,
garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Post 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.
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Post Reply