• 17.07.2025, 21:54
  • Register
  • Login
  • You are not logged in.

 

DerMaddin

Full Member

PHP unexpected t_break..

Saturday, April 2nd 2005, 10:02pm

hi,

wo ist hier der fehler ?

Quoted

<html>
<head>
<title></title>
<meta name="author" content="DerMaddin">
<meta name="generator" content="Ulli Meybohms HTML EDITOR">
</head>
<?php

function download($file , $name) {
$size = filesize($file);
header("Content-type: application/octet-stream");
header("Content-disposition: attachment; filename=".$name);
header("Content-Length: ".$size);
header("Pragma: no-cache");
header("Expires: 0");
readfile($file);
}
function error(){
echo("Download fehlerhaft");
}

switch($id){
case "1": $file = "img/00001.jpg"; $name = "affe.jpg"; break;
default: error(); break;
}

// Download der Datei
download("$file","$name");
?>
<body text="#000000" bgcolor="#FFFFFF" link="#FF0000" alink="#FF0000" vlink="#FF0000">
<center>Der Download startet!</center>
</body>
</html>
}


der downloaded das bild nich, sondern gibt es als text aus

ach ja: hier der link zum selber testen:
funblog.de/downloads/download.php?id=1

gruß maddin.

Y0Gi

God

Re: PHP unexpected t_break..

Saturday, April 2nd 2005, 10:31pm

ganz einfach: du gibst bereits html aus und der kram wird somit als text/html o.ä. gesendet. du darft vor den header-angaben keinen output senden, schon gar keinen der nicht zum bild gehört. beachte auch, dass vor und nach den <?php ... ?> keine weiteren zeichen stehen dürfen, auch keine leerzeichen und zeilenumbrüche.

hurra

God

Re: PHP unexpected t_break..

Saturday, April 2nd 2005, 11:03pm

Außerdem gehören die Anführungszeichen hier:
download("$file","$name");
weg.

Y0Gi

God

Re: PHP unexpected t_break..

Saturday, April 2nd 2005, 11:44pm

Quoted from "hurra"

Außerdem gehören die Anführungszeichen hier:
download("$file","$name");
weg.

das ist nicht zwingend erforderlich, aber ganz schlechter "stil". in doppelten anführungszeichen werden variablen ersetzt, in strings mit einfachen dagegen nicht. daher bringt es auch tatsächlich geschwindigkeitsvorteile, wenn man alle strings in einfachen anführungszeichen setzt, weil diese nicht geparst (d.h. nach variablen durchsucht) werden.

Source code

1
2
3
4
5
6
7
8
# schlecht:
$str1 = "Dein Name lautet $name.";

# besser:
$str2 = 'Dein Name lautet ' . $name . '.';

# auch ne möglichkeit, z.b. bei ankertags:
$str = sprintf('Dein Name lautet %s.', $name);

hurra

God

Re: PHP unexpected t_break..

Saturday, April 2nd 2005, 11:56pm

Ok, bins halt nur von "strengeren" Sprachen à la C gewöhnt.

Die Variante mit sprintf gefällt mir deßhalb auch am Besten )

Cu Hurra

Y0Gi

God

Re: PHP unexpected t_break..

Sunday, April 3rd 2005, 10:54pm

in php suckt das extrem, in python dagegen ist das erste liga. beispiel gefällig?

die X. zeile in php entspricht der X. in python:

Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#php
$str1 = sprintf('Dein Name ist %s.', $name);
$str2 = sprintf('<a href="%s" title="%s">%s</a>', $url, $title, $label);
# wiederverwendung von variablen, vgl. [url]http://de3.php.net/sprintf[/url]
$str3 = sprintf('<a href="%1$s" title="%2$s">%$2s</a>', $url, $title);

# python
str1 = 'Dein Name ist %s.' % name
str2 = '<a href="%s" title="%s">%s</a>' % (url, title, label)
# benannte platzhalter; dictionary in der gleichen zeile...
str3 = '<a href="%(url)s" title="%(title)s">%(label)s</a>' % ({'url': '...', 'title': '...', 'label': '...'})
# ... oder separat, z.b. weil aus nem datenbank-query bezogen
dict = {'url': '...', 'title': '...', 'label': '...'
str3b = '<a href="%(url)s" title="%(title)s">%(label)s</a>' % dict


bei php müssen in $str3 die dollarzeichen mit backslashes escaped werden ("%2\$s"), wenn doppelte anführungszeichen für die strings verwendet werden.