48067
Goto Top

Probleme mit der PHP-Funktion switch!

Moin.

Ich habe ein Problem!
In der PHP-Datei file-ext.lib.php habe ich eine Switch-Funktion die wie folgt aussieht:

$getext=end(explode(".", $Datei));  
        
        
        switch ($getext)
        {
        case MOV: $ext["name"]="mov";  
                  $ext["thumb"]="Include this mov as thumb";  
                  $ext["big"]="Inlcude this mov as big vid";  
                  $ext["date"]="2007-12-26 13:07";  
                  $supportedfile=1;
                  $isimage=0;
                  break;
                  
        case MPG: $ext["name"]="mpg";  
                  $ext["thumb"]="";  
                  $ext["big"]="";  
                  $ext["date"]="2007-12-26 13:07";  
                  $supportedfile=1;
                  $isimage=0;
                  break;
      default: $ext["name"]="";  
                 $ext["thumb"]="";  
                 $ext["big"]="";  
                 $ext["date"]="";  
                 $supportedfile=0;
                 break;
      }
      

Leider kann ich in der index.php die Werte für $supportedfile usw. auslesen. Auch wenn ich den Inhalt dieser Datei in die index.php reinkopiere und das include wegkommentiere kann ich diese Werte nicht auslesen.

Wie kann ich diese Werte nun in der index.php auslesen? (Wenn möglich mit der include-Function)
Bitte helft mir!

Content-Key: 76665

Url: https://administrator.de/contentid/76665

Printed on: April 23, 2024 at 08:04 o'clock

Member: runlevel2
runlevel2 Dec 26, 2007 at 16:12:05 (UTC)
Goto Top
Hy,

PHP denkt, bei MOV und MPG handelt es sich um Konstanten und versucht, diese aufzulösen. Einfache Anführungszeichen verwenden, dann gehts! Also:

switch ($getext)
        {
        case 'MOV': $ext["name"]="mov";  

case 'MPG': $ext["name"]="mpg";  

Gruss, runlevel2
Member: masterG
masterG Dec 26, 2007 at 19:38:14 (UTC)
Goto Top
Kann net gehen!
        switch ($getext)
        {
        case 'MOV': $ext["name"]="mov";  
                  $ext["thumb"]="Include this mov as thumb";  
                  $ext["big"]="Inlcude this mov as big vid";  
                  $ext["date"]="2007-12-26 13:07";  
                  $supportedfile=1;
                  $isimage=0;
                  break;
                  
        case 'MPG': $ext["name"]="mpg";  
                  $ext["thumb"]="";  
                  $ext["big"]="";  
                  $ext["date"]="2007-12-26 13:07";  
                  $supportedfile=1;
                  $isimage=0;
                  break;
      default: $ext["name"]="";  
                 $ext["thumb"]="";  
                 $ext["big"]="";  
                 $ext["date"]="";  
                 $supportedfile=0;
                 break;
      }
Du hast überall bei den Casename das ' ' vergessen
Member: filippg
filippg Dec 26, 2007 at 23:08:42 (UTC)
Goto Top
Hallo,

ich weiss nicht mehr wie streng php das handhabt. Aber die allermeisten Programmiersprachen das so nicht machen: switch ist ein Block, und variablen, die in einem Block definiert werden haben als Scope auch nur den Block und sind außerhalb (also nach dem switch-Block) ungültig. Lösung: Variable vor dem Block definieren, also vor dem switch ein "$supportedfile=0". Gilt natürlich auch für alle anderen Varialben.
Dem mit den Anführungszeichen kann ich nur halb beipflichten: Wenn du die Anführungszeichen weglässt interpretiert php das als Konstante, die ebendiesen Wert hat (also bei MOV eine Konstante mit dem Wert "MOV"). Sauber ist das aber nicht, in sofern mach die Zeichen lieber. Je nach Debuglevel meckert der Interpreter sonst auch.

Filipp
Mitglied: 48067
48067 Dec 27, 2007 at 11:41:25 (UTC)
Goto Top
Moin.

Erstmal Danke für die schnellen Antworten face-smile

Ich habe jetzt die leichten Anführungszeichen '' gesetzt und wie von Filipp erklärt die Variablen vor den switch-block gesetzt. Diese Datei habe ich in der index.php included jedoch lassen sich die Variablen dort nicht auslesen und benutzen.

Wo liegt der Fehler?
Member: runlevel2
runlevel2 Dec 27, 2007 at 20:44:58 (UTC)
Goto Top
Hy nochmal,

folgender Test:

Datei test2.php hat folgenden Inhalt:
<?php

$Datei="hallo.MOV";  

$getext=end(explode(".", $Datei));  
        
        
        switch ($getext)
        {
        case 'MOV': $ext["name"]="mov";  
                  $ext["thumb"]="Include this mov as thumb";  
                  $ext["big"]="Inlcude this mov as big vid";  
                  $ext["date"]="2007-12-26 13:07";  
                  $supportedfile=1;
                  $isimage=0;
                  break;
                  
        case 'MPG': $ext["name"]="mpg";  
                  $ext["thumb"]="";  
                  $ext["big"]="";  
                  $ext["date"]="2007-12-26 13:07";  
                  $supportedfile=1;
                  $isimage=0;
                  break;
      default: $ext["name"]="";  
                 $ext["thumb"]="";  
                 $ext["big"]="";  
                 $ext["date"]="";  
                 $supportedfile=0;
                 break;
      }

?>

Datei test1.php sieht so aus:

<?php

include("test2.php");  

echo "supportedfile hat den Wert: $supportedfile\n";  

?>

Bei einem Test auf der Shell bekomme ich folgendes Ergebnis:

[kurt@kurt dev]$ php test1.php
supportedfile hat den Wert: 1

Gruss, Kurt
Member: masterG
masterG Jan 03, 2008 at 09:19:19 (UTC)
Goto Top
Soll das Programm nur über die Shell laufen oder auch am Webserver?!?

masterG
Mitglied: 48067
48067 Jan 03, 2008 at 11:19:58 (UTC)
Goto Top
Soll das Programm nur über die Shell
laufen oder auch am Webserver?!?

masterG

Das Programm soll auch auf einem Webserver laufen. Was ist die Shell??

Nochmal zur Switch-Schleife:

Dürfen kommentare in die Schleife geschrieben werden?
Member: runlevel2
runlevel2 Jan 03, 2008 at 20:09:57 (UTC)
Goto Top
Hallo,

Die Shell ist ein Befehlsinterpreter auf Betriebssystem-Ebene. Damit kann man z. B. PHP-Code ohne Webserver ausführen. Bei Programmlistings hier im Forum ist das oft die einfachste Möglichkeit, das Ergebnis eines Programms zu zeigen. Die Scripten sollten natürlich auch auf dem Webserver funktionieren.

In Schleifen dürfen Kommentare stehen. PHP wertet diese nicht aus.

Gruss, Kurt
Mitglied: 48067
48067 Feb 05, 2008 at 14:22:22 (UTC)
Goto Top
Nach langer Zeit:
Ich hab noch ein Problem!

Ich habe in der gallery.php die Datei ext.lib.php included, wie folgt:

Zeile 9: include "system/ext.lib.php";

Zeile 155: isfilesupported($pfad,$Datei);

Zeile 157: if($supportedfile==1)
{
...
}
else
{No imgages}

Beim Laden passiert nichts außer dass der else teil in kraft tretet face-sad(((


Wie löse ich dass problem???


Zur Info: ext.lib.php::

<?php

function isfilesupported($pfad,$Datei)
{

$getext=strtoupper(end(explode(".", $Datei)));

switch ($getext)
{
case 'MOV': $ext["name"]="mov";
$ext["thumb"]="Include this mov as thumb";
$ext["big"]=$Datei."<br><br><br>\n<embed name=\"".$Datei."_embed\" type='video/quicktime' pluginspage='' src='".$pfad."/".$Datei."' displaysize='4' bgcolor='#00' showcontrols='1' showtracker='1' showdisplay='0' showstatusbar='1' volume='100' videoborder3d='1' transparentstart='1' height='300' width='400' autoplay='false'> </embed>";
$ext["date"]="2007-12-26 13:07";
$supportedfile=1;
$isimage=0;
break;

case 'MPG': $ext["name"]="mpg";
$ext["thumb"]="Include this mov as thumb";
$ext["big"]=$Datei."<br><br><br>\n<embed name=\"".$Datei."_embed\" type='video/mpg' pluginspage='' src='".$pfad."/".$Datei."' displaysize='4' bgcolor='#00' showcontrols='1' showtracker='1' showdisplay='0' showstatusbar='1' volume='100' videoborder3d='1' transparentstart='1' height='300' width='400' autoplay='false'> </embed>";
$ext["date"]="2007-12-26 13:07";
$supportedfile=1;
$isimage=0;
break;

case 'MPEG': $ext["name"]="mpeg";
$ext["thumb"]="Include this mov as thumb";
$ext["big"]=$Datei."<br><br><br>\n<embed name=\"".$Datei."_embed\" type='video/mpgeg' pluginspage='' src='".$pfad."/".$Datei."' displaysize='4' bgcolor='#00' showcontrols='1' showtracker='1' showdisplay='0' showstatusbar='1' volume='100' videoborder3d='1' transparentstart='1' height='300' width='400' autoplay='false'> </embed>";
$ext["date"]="2007-12-26 13:07";
$supportedfile=1;
$isimage=0;
break;


case 'JPG': $supportedfile=1;
$isimage=1;
break;

case 'JPEG': $supportedfile=1;
$isimage=1;
break;

case 'PNG': $supportedfile=1;
$isimage=1;
break;

case 'GIF': $supportedfile=1;
$isimage=1;
break;

case 'BMP': $supportedfile=1;
$isimage=1;
break;

default: $ext["name"]="";
$ext["thumb"]="";
$ext["big"]="";
$ext["date"]="";
$supportedfile=0;
break;
}

}
?>
Member: runlevel2
runlevel2 Feb 05, 2008 at 14:57:56 (UTC)
Goto Top
Hy,

die Var $supportedfile ist nur innerhalb der Funktion gültig. Du hast zwei Möglichkeiten.

1) Du machst die Var $supportedfile in der Funktion global gültig. In ext.lib.php:
<?php

function isfilesupported($pfad,$Datei)
{

global $supportedfile;

$getext=strtoupper(end(explode(".", $Datei)));  
.
.
.


2) In der Datei gallery.php die Funktion wie folgt aufrufen:
$supportedfile=isfilesupported($pfad,$Datei);
und in ext.lib.php ein return der Var setzen:
.
.

default: $ext["name"]="";  
$ext["thumb"]="";  
$ext["big"]="";  
$ext["date"]="";  
$supportedfile=0;
break;


}

return $supportedfile;
}
?>

Möglichkeit 2 ist die sauberere Lösung.

Gruss, Kurt
Mitglied: 48067
48067 Feb 05, 2008 at 15:06:13 (UTC)
Goto Top
Danke! Es klappt! Hast du dir PHP selbst beigebracht oder brauchst du es beruflich?
Member: runlevel2
runlevel2 Feb 05, 2008 at 15:22:52 (UTC)
Goto Top
Hy nochmal,

für die PHP-Basics hab ich einen Kurs besucht. Wurde damals vom Arbeitsamt angeboten. Danach kam ich selber weiter. Beruflich kann ich die Sprache gut brauchen (Sysadmin).

Grüße, Kurt