PHP-Probleme

jemand anders

Erfahrenes Mitglied
Hallo,

ich versuche in PHP einzusteigen.

Zum Beginn habe ich mir mal die RSS-Geschichte hier vorgenommen.

Leider habe ich immer Fehler, wenn ich das Ding ausführe.

Weiß jemand, ob der Code von denen korrekt ist?

Wenn ich den Code ausführe aus der o. g. Seite, wird mir folgendes angezeigt im Browser (nicht in der Konsole):
Code:
load($xml); //get elements from "" $channel=$xmlDoc->getElementsByTagName('channel')->item(0); $channel_title = $channel->getElementsByTagName('title') ->item(0)->childNodes->item(0)->nodeValue; $channel_link = $channel->getElementsByTagName('link') ->item(0)->childNodes->item(0)->nodeValue; $channel_desc = $channel->getElementsByTagName('description') ->item(0)->childNodes->item(0)->nodeValue; //output elements from "" echo("

" . $channel_title . ""); echo("
"); echo($channel_desc . "

"); //get and output "" elements $x=$xmlDoc->getElementsByTagName('item'); for ($i=0; $i<=2; $i++) { $item_title=$x->item($i)->getElementsByTagName('title') ->item(0)->childNodes->item(0)->nodeValue; $item_link=$x->item($i)->getElementsByTagName('link') ->item(0)->childNodes->item(0)->nodeValue; $item_desc=$x->item($i)->getElementsByTagName('description') ->item(0)->childNodes->item(0)->nodeValue; echo ("
" . $item_title . ""); echo ("
"); echo ($item_desc . "

"); } ?>

Wie kann man sich generell Fehler anzeigen lassen, wenn PHP-Code ausgeführt wird? Ich habe in Firefox die Browserkonsole aktiv um Fehler zu sehen.


Gruß
 
Hi

Schaut für mich so aus, dass PHP gar nicht ausgeführt wird, sondern wie einfache Html-Dateien einfach so zu Browser gesendet wird.

Ist Apache usw. selbst eingestellt (oder von einem Hoster etc.)? Hast du die Möglichkeit an den Einstellungen was zu ändern?
Wie heißt die Datei am Server, wo der Code drin ist?

(Oder, da das aus der Frage nicht ganz klar ist, gibt es überhaupt einen Server? Am eigenen Rechner alles zu machen ist schon möglich, aber die Php-Datei kann trotzdem nicht einfach als Datei im Browser geöffnet werden).
 
Zuletzt bearbeitet:
Code:
<!DOCTYPE html>
<html lang="en-US">
<head>
<title>PHP Example - AJAX RSS Reader</title>
<meta name="viewport" content="width=device-width">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<script>
function showRSS(str) {
  if (str.length==0) {
    document.getElementById("rssOutput").innerHTML="";
    return;
  }
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  } else {  // code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {
    if (this.readyState==4 && this.status==200) {
      document.getElementById("rssOutput").innerHTML=this.responseText;
    }
  }
  xmlhttp.open("GET","getrss.php?q="+str,true);
  xmlhttp.send();
}
</script>
</head>
<body>

<form>
<select onchange="showRSS(this.value)">
<option value="">Select an RSS-feed:</option>
<option value="Google">Google News</option>
<option value="NBC">Presse24</option>
</select>
</form>
<br>
<div id="rssOutput">RSS-feed will be listed here...</div>
</body>
</html>

Code:
<?php


// https://stackoverflow.com/questions/1053424/how-do-i-get-php-errors-to-display
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);


//get the q parameter from URL
$q=$_GET["q"];

//find out which feed was selected
if($q=="Google") {
  $xml=("https://news.google.com/news?ned=us&topic=h&output=rss");
} elseif($q=="Presse24") {
  $xml=("http://press24.net/rss/all");
}

$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;

//output elements from "<channel>"
echo("<p><a href='" . $channel_link
  . "'>" . $channel_title . "</a>");
echo("<br>");
echo($channel_desc . "</p>");

//get and output "<item>" elements
$x=$xmlDoc->getElementsByTagName('item');
for ($i=0; $i<=2; $i++) {
  $item_title=$x->item($i)->getElementsByTagName('title')
  ->item(0)->childNodes->item(0)->nodeValue;
  $item_link=$x->item($i)->getElementsByTagName('link')
  ->item(0)->childNodes->item(0)->nodeValue;
  $item_desc=$x->item($i)->getElementsByTagName('description')
  ->item(0)->childNodes->item(0)->nodeValue;
  echo ("<p><a href='" . $item_link
  . "'>" . $item_title . "</a>");
  echo ("<br>");
  echo ($item_desc . "</p>");
}
?>
Schaut für mich so aus, dass PHP gar nicht ausgeführt wird, sondern wie einfache Html-Dateien einfach so zu Browser gesendet wird.
Wie erkennt man das? Localhost läuft.
Ist Apache usw. selbst eingestellt (oder von einem Hoster etc.)? Hast du die Möglichkeit an den Einstellungen was zu ändern?
Wie heißt die Datei am Server, wo der Code drin ist?
Wie gesagt, lokal. Die Files heißen rss-feed.html und gettrss.php und liegen in /srv/www/htdocs/xxx/

Code:
systemctl  status apache2                                                                                                                                
● apache2.service - The Apache Webserver
   Loaded: loaded (/usr/lib/systemd/system/apache2.service; disabled; vendor preset: disabled)
   Active: active (running) since Do 2018-04-05 15:24:29 CEST; 24h ago
 Main PID: 22776 (httpd-prefork)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
    Tasks: 7
   CGroup: /system.slice/apache2.service
           ├─22776 /usr/sbin/httpd-prefork -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d//loadmodule.conf -C Include /etc/apache2/sysconfig.d//global.c...
           ├─22784 /usr/sbin/httpd-prefork -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d//loadmodule.conf -C Include /etc/apache2/sysconfig.d//global.c...
           ├─22785 /usr/sbin/httpd-prefork -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d//loadmodule.conf -C Include /etc/apache2/sysconfig.d//global.c...
           ├─22787 /usr/sbin/httpd-prefork -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d//loadmodule.conf -C Include /etc/apache2/sysconfig.d//global.c...
           ├─22788 /usr/sbin/httpd-prefork -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d//loadmodule.conf -C Include /etc/apache2/sysconfig.d//global.c...
           ├─22789 /usr/sbin/httpd-prefork -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d//loadmodule.conf -C Include /etc/apache2/sysconfig.d//global.c...
           └─23411 /usr/sbin/httpd-prefork -DSYSCONFIG -C PidFile /var/run/httpd.pid -C Include /etc/apache2/sysconfig.d//loadmodule.conf -C Include /etc/apache2/sysconfig.d//global.c...

Apr 05 15:24:27 Linux.suse systemd[1]: Starting The Apache Webserver...
Apr 05 15:24:28 Linux.suse start_apache2[22776]: AH00557: httpd-prefork: apr_sockaddr_info_get() failed for Linux.suse
Apr 05 15:24:28 Linux.suse start_apache2[22776]: AH00558: httpd-prefork: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'Se...his message
Apr 05 15:24:29 Linux.suse systemd[1]: Started The Apache Webserver.
Hint: Some lines were ellipsized, use -l to show in full.
 
Zuletzt bearbeitet:
In der PHP-Datei hast du HTML innerhalb der "<?php ?>"-Sektion. Das ist a) nicht erlaubt und b) verwirrt mit den ganzen <> den Parser, was jetzt PHP und was nicht ist.

Wenn (auch) reines Html in der Php-Datei sein soll, entweder außerhalb von "<?php ?>"-Bereichen, oder per echo ausgeben (oder noch ein paar nicht so wichtige Möglichkeiten wie Heredoc).

Aber, warum eigentlich? Das verlinkte Beispiel nachzubauen erfordert kein Html in der Php-Datei. Und da die Ausgabe per JS geladen und weiterverarbeitet wird, sollte da wohl auch nur der RSS-Inhalt sein, ohne HTML dazugemixt.

(Die Serversachen passen dann wohl alle - war nur eine Vermutung in die falsche Richtung)
 
Es sind 2 Files. 1 HTML-File und ein PHP-File.
Ich will eigentlich nur wissen, ob das Beispiel lauffähig ist.
Ich steige in PHP ein, und es ist üblich, dass bei allen alles auf Anhieb klappt - nur bei mir nicht, weil irgendwo der Wurm drin ist. Gemein. ;-(
 
Sorry, da ist mir hier beim Einstellen ein Fehler passiert.
Habe ich korrigiert. Es sind zwei Dateien: eine HTML- und eine PHP-Datei.

Ich habe noch zwei Dateien, um localhost zu testen.
File: index.html
Code:
<html><body><h1>/srv/www/htdocs/php1</h1></body></html>
FIle: index.php
Code:
<?php
echo getcwd();
// phpinfo();
?>
Wenn ich localhost aufrufe ohne Apache zu starten, kommt die Meldung "Fehler: Verbindung fehlgeschlagen".
Wenn Apache läuft, wird mir im Browser "/srv/www/htdocs" angezeigt (ohne Anführungszeichen).
 
.htaccess war
Code:
AddType application/x-httpd-php.html .htm .php
Habe ich geändert in
Code:
AddType application/x-httpd-php.html .php .html .htm
Ist aber kein Unterschied, d. h. sobald man in der Listbox etwas auswählt, kommt der eingangs erwähnte Salat.
 

Neue Beiträge

Zurück