5907 HD Link zum aktuellen Bild

Guten Morgen,

ich habe eine kurze Frage.

Alle 30 Minuten lade ich ein Bild mit unterschiedlichen Namen auf meinen FTP-Server. Dies ist nötig, da ich ein Script mit Archiv haben.

Aber ich bräuchte auch einen Link mit dem aktuellen bzw. letzt aufgenommenen Bild. Der Link darf sich aber nicht verändern.

D.h. ich bräcuhte beide Varianten, 1. einen festen Namen und 2. einen variablen Namen.

Gibt es da eine Möglichkeit? Via Script etc?

Danke im Voraus.

MfG

Servus,

und willkommen im Forum.

Aktueller Snapshot laut Instar-Faq’s:

http://user:passw@IP-Address:Port/tmpfs/snap.jpg

gruss

Danke für die schnelle Antwort.

Das funktioniert zwar, aber nur in meinem Netzwerk.

Ich bräuchte aber einen Link zu dem aktuellen Bild, für andere Websites. z.B. Webcam-Portale.

Gibt es da eine Möglichkeit, dass ich beide Varianten zu gleich nutze? (Feste und Variabler Name)

Gibt es auch eine Möglichkeit das die Kamera z.B. nur von 07.00-22.00 Uhr Bilder auf den FTP-Server läd?
Es gibt zwar einen Zeitplan, aber der gilt ja nur für den Alarm oder?

mfG

[QUOTE=anonym505;11573]Aber ich bräuchte auch einen Link mit dem aktuellen bzw. letzt aufgenommenen Bild. Der Link darf sich aber nicht verändern.
D.h. ich bräcuhte beide Varianten, 1. einen festen Namen und 2. einen variablen Namen.
Gibt es da eine Möglichkeit? Via Script etc?[/QUOTE]

Du brauchst nur einen Script, der dich auf das letzte jpg weiterleitet. Die letzte Datei musst Du deswegen nicht doppelt vorhalten. Hier die Lösung in ASP.NET / C#.

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;

namespace GetCurrentFile
{
    public partial class Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Response.Clear();
            DirectoryInfo directory = new DirectoryInfo(@"D:\inetpub\ftp\webcam");
            string filename = directory.GetFiles("*.jpg").OrderByDescending(f => f.LastWriteTime).First().Name;
            Response.Redirect(@"./" + filename, true);
        }
    }
}

Verlinkung auf das Bild mit http://meinewebadresse/verzeichnis/default.aspx

cp

Danke für die Hilfe.

Ich kenne mich aber leider nur mit HTML aus, was muss ich da noch ändern und viel wichtiger wo und wie einfügen?

mfG

Wieso? :confused:
Das geht auch von extern, per DynDNS.

gruss

Ok, per DynDNS habe ich es noch nicht probiert.

Aber die Variante mit dem Script wäre mir fast lieber.

Danke!

Mit HTML wirst Du hier nicht weiterkommen, weil das was Du willst, einen serverseitigen Script erfordert. Evtl. ginge noch etwas via jQuery und AJAX, aber auch das erfordert weitergehende Programmierkenntnisse mit Javascript und Du müsstest Dein gesamtes Verzeichnis als „browsable“ einstellen, was sicherheitstechnisch nicht zu empfehlen ist. Fazit: Entweder Du findest jemand, der Dir eine Scriptlösung auf Basis ASP.NET,PHP & Co. bastelt, oder Du must das Vorhaben leider begraben.

Alternativ könntest Du den FTP bei der Kamera deaktivieren und via Powershell die Bilder von der Kamera holen und das jeweils neueste immer zusätzlich mit einem festen Namen kopieren. Auch das erfordert allerdings weitergehende Programmierkenntnisse und Serverzugriff, zudem müsstest Du da das Filelocking-Problem berücksichtigen, d.h. eine Lösung dafür finden, dass das File überschrieben werden kann, während es gerade im Browser angesehen wird.

cp

Probiere es doch damit (PHP läuft auf den meisten Web-Servern): http://www.php-resource.de/forum/showthread/t-3005.html

wie man PHP benutzt: http://www.php.net/manual/de/tutorial.firstpage.php

Grob gesagt: Datei irgendwas.php nennen, <?php vor den Code, ?> dahinter. Was hinter echo steht wird dann in die Datei eingefügt, die der Browser sieht (in diesem Fall also ein Bild in HTML mit dem gerade ermittelten Dateinamen.

Du musst nur den absoluten Pfad des Ordners mit den Bildern finden. Das geht über die im zweiten Link erwähnte phpinfo() oder <?php echo $DOCUMENT_ROOT; ?>.

Hallo,
danke für die Hilfe.
Ich habe es ausprobiert und leider wird das Bild nicht angezeigt.
Ich bekomme foldende Seite Angezeigt:

Verwende habe ich diesen Code:
<html>
<head>
<title>PHP-Test</title>
</head>
<body>
<?
$pfad = ‚/var/www/virtual/meine.domain.at/htdocs/cam/cam2‘;
$bild = ‚‘;
$dir = opendir ($pfad);
while ($file=readdir($dir))
if (!$bild || filemtime($bild)<filemtime("$pfad/$file"))
$bild = „$pfad/$file“;
echo ‚<img src="‘. $bild. ‚">‘;
?>
</body>
</html>

Kannst du mir vl. weiter helfen?

MfG

Ich denke es liegt an der falschen Schreibweise um PHP aufzurufen, da hast du scheinbar das „php“ vergessen. An den Anfang kommt: <?php

Ansonsten hilft der Quellcode (Rechtsklick --> Seitenquelltext anzeigen oder so) mehr als ein Screenshot. Auf dem erkennt man nur, dass das Bild nicht geladen werden kann :smiley:

Habs jetzt in <?php geändert, doch leider funktioniert es nicht.

Quellcode:
<html>
<head>
<title>PHP-Test</title>
</head>
<body>
<img src="/var/www/virtual/meine.domain.at/htdocs/cam/cam2/P14033112350410.jpg"> </body>
</html>

Wenn ich den (img src) URL aufrufen will, passiert nichts bzw. werde ich zu Google weitergeleitet.

Edit:
Wenn ich den direketen Link in die Php. Datei einfüge z.B. http://www.meine.domain.at/cam/cam2/
bekomme ich folgenden Fehler:

MfG

Kannst du bitte noch einmal genau beschreiben, was du eigentlich machen willst.
Bin aus deinem ersten Beitrag nicht ganz schlau geworden.

Wo steht der Server, auf dem du das Script aufrufst? (lokal / ausserhalb)
Von wo aus soll welches Bild aufgerufen werden?
Wie sieht es mit deinen Erfahrungen aus? Dein Code sagt mir, dass du gerade erst angefangen hast, dich mit serverseitigen Anwendungen zu beschäftigen?

Ok, das war mein Fehler. Da war ich nicht kritisch genug beim Durchgucken des von mir verlinkten Codes.

In der vorletzten Zeile wird der interne Dateipfad (den PHP verwendet) von davorgehangen. Das ist nicht unbedingt sinnvoll, da dieser sich quasi immer von dem Pfad, den der Browser benutzt unterscheidet (PHP: so etwas wie C:\Homepage\meine\Bilder oder ähnliches im Linux-Stil; Browser: http://www.example.org/webcam/). Am besten ist es wohl, die Zeile zu ändern und $pfad/ zu entfernen. Dann wird später nur der Dateiname ohne den PHP-Pfad ausgegeben. Der Browser-Pfad (www…) sollte ja bekannt sein. Am zuverlässigsten wäre es, diesen in das echo einzufügen: <img src=„http://www.example.org/pfad/zum/'. $bild. '“> . Dann sollte im HTML-Quelltext später der Pfad + der Dateiname stehen (vermutlich http://www.domain.at/cam/cam2/P14033112350410.jpg). Alternativ könnte man nur den Dateinamen oder einen anderen relativen Bezug ausgeben. Dann funktioniert das ganze aber nur, wenn von der Browser-Adresse aus der Pfad richtig fortgesetzt wird (Bsp.: Browser ist in www.example.org/test.php, src=„bild.jpg“ weist dann auf www.example.org/bild.jpg, src=„webcam/bild.jpg“ auf www.example.org/webcam/bild.jpg). Dann muss man aber immer gucken, wo die PHP liegt (wird die verschoben, funktioniert es nicht.

Hier noch einmal der (unkorrigierte Code) mit Kommentaren, was dort gemacht wird.

<php?
$pfad = ‚/var/www/virtual/meine.domain.at/htdocs/cam/cam2‘; // definiert die Variable $pfad, die wird verwendet, um PHP zu sagen, wo es die Bilder suchen soll
$bild = ‚‘; // eine leere Variable mit dem Namen bild wird angelegt
$dir = opendir ($pfad); // PHP wird der Ordner aus $pfad vorgesetzt
while ($file=readdir($dir)) // PHP soll den ganzen Ordner durchackern
if (!$bild || filemtime($bild)<filemtime(„$pfad/$file“)) // wenn die gerade abgearbeitete Datei jünger ist, als die zuletzt gemerkte …
$bild = „$pfad/$file“; // … dann merke sie dir (mit $pfad davor) in $bild
echo ‚<img src="‘. $bild. ‚">‘; // nun schreibe den Code für das Bild mit Pfad $bild in die HTML-Datei
?>


Wo ich gerade am schreiben bin: Folgende Methode ist etwas schöner, v.a. weil man so z.B. die Bilder der Webcam selbst für den Homepage-Besucher sperren kann. Außerdem kann man dann von überall ganz einfach auf die PHP zugreifen, als wäre es das gesuchte Bild.

Die Magie:

<?php
if (!is_file($bild) || !is_readable($bild)) { // wenn Datei nicht existiert oder nicht lesbar ist
die(„File not found“); // breche ab, mit Fehlermeldung „File not found“
}
header(„Content-type: image/jpg“); // nun sagen wir dem Browser, dass er eine JPG-Datei gefunden hat :wink:
readfile($bild); // und nun gibt PHP einfach statt HTML oder so die JPG aus
?>

Im Prinzip ist dies eine Weiterleitung. Die Datei ist zwar eine PHP, aber wird dem Browser als JPG mit dem Inhalt der JPG vorgesetzt (ähnlich funktionieren die meisten Banner und Counter im Netz). Vor diesem Code müsste der vorige Code natürlich auch kommen (der Code ist das zwischen den Tags <?php und ?>; beide Code-Schnippsel müssen direkt auf einander folgen und einmal <?php und ?> drumherum), um erstmal festzulegen, welche Datei $bild ist. Dann aber nichts ändern und $pfad/ drin lassen, dann ist es auch ganz egal, wo die PHP gespeichert ist.

Nun kann man die PHP-Datei einbinden, als sei sie ein gewöhnliches Bild (z.B. <img src=„http://www.example.org/bild.php“>), ganz egal wo man ist und wo die Webcam-Bilder jetzt genau sind (wenn $pfad in der PHP stimmt).
Größter Vorteil: PHP liest die Datei auf dem Server intern aus. So kann man das Verzeichnis mit den Bildern auf dem Webspace für Besucher sperren, PHP kommt immer noch dran.
Verzeichnisse für Besucher sperren kann man mit der .htaccess-Datei. Will man alles für das Internet dicht machen (über FTP z.B. kommt man selbst immer noch dran, nur nicht über HTTP), schreibt man folgendes in eine Text-Datei, nennt sie .htaccess (ja Punkt am Anfang; das mag Windows nicht, deshalb später per FTP auf dem Server umbenennen) und speichert sie im zu sperrenden Ordner:
<Files „.“>
Deny from all
</Files>

Kannst das ja mal ausprobieren, so sollte man per Browser an nichts mehr dran kommen. Falls man selber ab und zu per Browser in den Ordner will, kann man auch Passwörter vergeben. Dazu muss man den gleichen Pfad wie vorhin für PHP wissen und befolgt die Anweisungen hier: http://www.webmaster-toolkit.com/htaccess-generator.shtml. Beide Dateien dann in den Ordner packen (.htaccess wie vorher nur mit anderem Inhalt; .htpasswd direkt daneben.

@hannesfr:
So wie ich es verstanden habe, möchte er einfach auf der Homepage immer das aktuellste Bild aus dem Archiv angezeigt bekommen. Beides liegt auf dem gleichen Webserver und scheint ja schon halbwegs zu funktionieren.

Danke für eure Hilfe!
Es schaut sehr kompliziert aus :smiley:
Ich werde es mir heute am Abend einmal genau ansehen, und melde mich dan wieder.

MfG

So… ich habe mir den „neuen“ Code angesehen und komme leider nicht weiter :frowning:

Das Problem ist, das mir das Bild nicht angezeigt wird, bzw. noch immer das gleiche wie oben im Screenshot gezeigt.
Das Problem liegt glaube ich an der Verlinkung zum Content…
Kannst du mir da weiterhelfen?

MfG

Was steht denn im Quellcode für ein Link zu dem Bild? Und was passiert, wenn man den Link dort direkt im Browser aufruft?

<html>
<head>
<title>PHP-Test</title>
</head>
<body>
<img src="/var/www/virtual/meine-domain.at/htdocs/cam/cam2/P14040412191110.jpg"> </body>
</html>

Das steht dan im Quellcode.

Wenn ich den Link direkt aufrufe komme ich auf Google: Es wurden keine mit Ihrer Suchanfrage - /var/www/virtual/meine-domain.at/htdocs/cam/cam2/P14040412191110.jpg - übereinstimmenden Dokumente gefunden.

Wenn ich aber den Link so aufrufe : http://www.meine-domain.at/cam/cam2/P14040412191110.jpg komme ich auf das richtige Bild??

Wenn ich nur den Ordner aufrufen will http://www.meine-domain.at/cam/cam2/ kommt folgende Meldung

MfG

Hast du alles berücksichtigt und angewandt, was ich geschrieben habe? Eigentlich sollte der Pfad durch das weglassen von $pfad ja verschwinden. Effektiv hat sich ja nichts geändert. Hier noch einmal der kommentierte Code (Variante 1 mit direktem Zugriff auf JPG über Browser) mit den Änderungen und einer kleinen Optimierung (empfohlener Ordner-Aufruf mit Fehlerberücksichtigung):

<?php
$pfad = ‚/var/www/virtual/meine.domain.at/htdocs/cam/cam2‘; // definiert die Variable $pfad, die wird verwendet, um PHP zu sagen, wo es die Bilder suchen soll
$bild = ‚‘; // eine leere Variable mit dem Namen bild wird angelegt
$dir = opendir ($pfad); // PHP wird der Ordner aus $pfad vorgesetzt
while (false !== ($file = readdir($dir))) { // PHP soll den ganzen Ordner durchackern (neu: Fehlerberücksichtigung)
if (!$bild || filemtime("$pfad/$bild")<filemtime("$pfad/$file")) // wenn die gerade abgearbeitete Datei jünger ist, als die zuletzt gemerkte …
$bild = „$file“; } // … dann merke sie dir (nicht mehr mit $pfad davor) in $bild
echo ‚<img src="‘. $bild. ‚">‘;
?>

Wenn dies klappt (da muss z.B. <img src=„http://www.meine-domain.at/cam/cam2/P14040412191110.jpg“> stehen), kannst du folgendes (nur dies, auch keine Leerzeichen/-zeilen) in eine .php-Datei schreiben für Variante 2:

<?php
$pfad = ‚/var/www/virtual/meine.domain.at/htdocs/cam/cam2‘; // definiert die Variable $pfad, die wird verwendet, um PHP zu sagen, wo es die Bilder suchen soll
$bild = ‚‘; // eine leere Variable mit dem Namen bild wird angelegt
$dir = opendir ($pfad); // PHP wird der Ordner aus $pfad vorgesetzt
while (false !== ($file = readdir($dir))) { // PHP soll den ganzen Ordner durchackern (neu: Fehlerberücksichtigung)
if (!$bild || filemtime($bild)<filemtime("$pfad/$file")) // wenn die gerade abgearbeitete Datei jünger ist, als die zuletzt gemerkte …
$bild = „$pfad/$file“; } // … dann merke sie dir (diesmal mit $pfad davor) in $bild
// kein echo
if (!is_file($bild) || !is_readable($bild)) { // wenn Datei nicht existiert oder nicht lesbar ist
die(„File not found“); // breche ab, mit Fehlermeldung „File not found“
}
header(„Content-type: image/jpg“); // nun sagen wir dem Browser, dass er eine JPG-Datei gefunden hat :wink:
readfile($bild); // und nun gibt PHP einfach statt HTML oder so die JPG aus
?>

Hallo,
ich habe es mit der 1. Variante probiert.

Folgender Fehler tauch jetzt auf:
Parse error: syntax error, unexpected ‚*‘, expecting ‚)‘ in /var/www/virtual/meine-domain.at/htdocs/aktuell.php on line 13

Ich habe den * durch ’ ausgetauschst, doch es bring nichts.

MfG