» »

PHP header problem

PHP header problem

l0g1t3ch ::

Naredu sm skripto s katero UL-jam csv datoteko in jo spremenim v ustrezen xml ter shranim v neko mapo na strežniku kjer jo lahko uporabnik kasneje pobere.
Je pa to nepraktično in bi rad namesto, da shranjujem na strežniku to datoteko takoj ponudu uporabniku za DL in tle imam problem.
Na začetku skripte seveda naredim preprosr obrazec za UL in ko bi sedaj rad uporabniku poslav datoteko za dl bi rabu nastavit header, kar pa ne gre saj sem že nekaj poslav (začetni obrazec) in headerja ne gre spreminjat.
Kako se rešit tega ? Slišu sm, da naj bi uporabil ustrezne "ob_" funkcije, samo se mi ne sanja katere naj bi bile to.

keworkian ::

Obscenities in B-Flat

MrBrdo ::

Em mislim da ni to problem pri tebi... Pač uporabnik naj submita form na nek PHP (form action atribut) ki samo izpiše tisti XML, na začetku pa še header nastaviš...
MrBrdo

techfreak :) ::

keworkian je izjavil:

http://php.net/manual/en/function.ob-st...

Tole verjetno

Bolje je vso kodo prestaviti nad vsebino, ker se bo v tem primeru uporabniku stran hitreje naložila, saj bo PHP takoj poslal izpis uporabniku.

Pri ob_start pa se počaka, da se izvajanje skripte konča in šele potem pošlje vso vsebino.

l0g1t3ch ::

ob_start torej ?
Raim samo hitro rešitev, ne pa najbolše.

l0g1t3ch ::

Mi lahko kdo pove kako to uporabit, ker mi je ta funkcija pravtako kot cel php en velik WTF.
Skripta zgleda tako, da je na začetku 30 vrstic html-ja potem pa se začne php skripta sama, kako sedaj najlažje naredit, da bom lahko poslav tist fajl uporabniku (kot rečeno je težava v header, ker ga ne morem še enkrat poslat).

P.S. sem samo žrtev, ki mora popravljati od nekoga drugega sranje čeprov nikol nsim delu z php-jem

keworkian ::

Dj za foro kodo sem no.
Obscenities in B-Flat

l0g1t3ch ::

Tole je ta bog pomagi od kode. Umes sm izpustu 500 vrstic slame, ki pomoje ni pomebna.

<?php

date_default_timezone_set( "Europe/Ljubljana" );
$radio1 = isset( $_POST['tip_izpisa'] ) && $_POST['tip_izpisa'] == "1" ? "checked" : "";
$radio2 = isset( $_POST['tip_izpisa'] ) && $_POST['tip_izpisa'] == "2" ? "checked" : "";
$radio3 = isset( $_POST['tip_izpisa'] ) && $_POST['tip_izpisa'] == "3" ? "checked" : "";
if( !isset( $_POST['tip_izpisa'] ) ) {
	$radio1 = "checked";
}

echo "
<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'>
<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'>
<head>
	<title>Interenergo | Generator voznih redov</title>
	<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />
	<meta http-equiv='PRAGMA' content='no-cache' />
	<meta http-equiv='CACHE-CONTROL' content='no-cache' />
	<meta http-equiv='X-UA-Compatible' content='IE=7' />
	<meta http-equiv='X-UA-Compatible' content='chrome=1' />
</head>
<body>

<h4>Interenergo - generator voznih redov:</h4>
<table border='0' cellpadding='3' cellspacing='1' width='600px' style='border:1px solid'>
<form name='form_workers' enctype='multipart/form-data' method='post'>
<tr class='tabela_polja2'>
	<td width='150px' style='background-color:#eee8cd'>Izvorna datoteka (CSV):</td>
	<td style='background-color:#eee8cd'><input type='file' name='upload_file' class='textbox' style='width:100%'></td></tr>
<tr class='tabela_polja2'>
	<td style='background-color:#f5f5f5' colspan='2' align='center' height='30px'>
		<input type='radio' name='tip_izpisa' value='1' $radio1>APG 
		<input type='radio' name='tip_izpisa' value='2' $radio2>APCS
		<input type='radio' name='tip_izpisa' value='3' $radio3>RWE  
	</td>
</tr>
";

if( !isset( $_POST['interenergo_vozni_redi_xml_export'] ) ) {
	echo "
		<tr class='tabela_zgoraj'>
			<td style='background-color:#eee8cd' align='center' height='40px' colspan='2'>
				<input type='submit' name='interenergo_vozni_redi_xml_export' value='Generiraj datoteko'>
			</td>
		</tr>
	";
}

echo "</form>";

//============================================//
// Generiranje XML datoteke
//============================================//
if( isset( $_POST['interenergo_vozni_redi_xml_export'] ) ) {
	set_time_limit( 120 );
	$tip_izpisa = $_POST['tip_izpisa'];
	$target_folder = "UPLOAD";
	
	$filename = $_FILES['upload_file']['name'];
	$filename = stripslashes( $filename );
	if( substr( $filename, strlen( $filename ) - 3 ) != "csv" ) {
		echo "
			<tr class='tabela_polja2'>
			<td colspan='2' align='center'><font color='#ff0000'>Datoteka za uvoz ni tipa CSV. Izberi drugo!</font></td>
			</tr>
		";
		$tip_izpisa = -1;	
	}
	else {
		$filename = date('Ymd_His_').str_replace( "'", "", $filename );
		$copy = move_uploaded_file( $_FILES['upload_file']['tmp_name'], $target_folder."/".$filename );
	}
	
	$error1 = "
		<tr class='tabela_polja2'>
		<td colspan='2' align='center'>
		<font color='#ff0000'>Struktura dokumenta ni pravilna!</font>
		</td>
		</tr>
	";

	$podatki = "";
	$ime_datoteke = "";
	
	$errors = false;
	$stevilo_zapisov = 0;
	$file_name_out = "";

	
	...
	
	
	$podatki_export .= "</ScheduleMessage>";
	unlink( $target_folder."/".$filename );
	$ime_datoteke = $file_name_out.".xml";
	//file_put_contents($ime_datoteke, $podatki_export);
		
	header("Content-Type: application/xml");
	header('Content-Disposition: attachment; filename="downloaded.xml"');
	print $podatki_export;

// The PDF source is in original.pdf
//readfile('original.pdf');
	

	if( !$errors ) {
		if( $stevilo_zapisov == 0 ) {
			echo "
				<form name='form_export_xml' action='' method='post'>
				<tr class='tabela_zgoraj'>
				<td align='center' height='50px' colspan='2'>
				Datoteka ne vsebuje zapisov.<br><br>
				Preverite, če izvorna datoteka sploh vsebuje podatke in 
				če je aplikacija javila kakšno napako v obdelavi!
				</td></tr>
				</form>
			";
		}
		else {
			echo "
				<form name='form_export_xml' action='' method='post'>
				<tr class='tabela_zgoraj'>
				<td align='center' height='40px' colspan='2'>
				<input type='hidden' name='ime_datoteke' value='$ime_datoteke'>
				<input type='hidden' name='podatki_za_export' value='$podatki_export'>
				<input type='submit' name='xml_export_out' value='Shrani XML datoteko'>
				</td></tr>
				</form>
			";
		}
	}
}

echo "
	</table>
</body>
</html>
";

?>

Packač ::

Na začetek datoteke (pred html) kliči "ob_start()", na zadnjo vrstico pa "ob_end_flush()".

l0g1t3ch ::

Hm to sicer dela, ampak mi zdej v fajl shrani generiran XML pa kr en html in svašta.
ta skripta je FUBAR.

Packač ::

Aja oprost, nism pogledu dobr kode.

V glavnem buffer zaženi takoj na začetku, ko pa pride do tistega dela ko pošlješ datoteko izbriši buffer z ob_end_clean() in ko datoteko pošlješ magari zaključiš še z izvajanjem "exit;"

Preberi si kako deluje output buffering. http://si.php.net/manual/en/function.ob...

keworkian ::

Kaj pa ce bi dal recimo

$errors = false;
$stevilo_zapisov = 0;
$file_name_out = "";
ob_start();

$podatki_export .= "</ScheduleMessage>";
unlink( $target_folder."/".$filename );
$ime_datoteke = $file_name_out.".xml";
//file_put_contents($ime_datoteke, $podatki_export);
header("Content-Type: application/xml");
header('Content-Disposition: attachment; filename="downloaded.xml"');
$content = ob_get_contents();

ob_end_clean();

echo $content;


Mislim da bi tole moral delat
Obscenities in B-Flat

l0g1t3ch ::

@Knight
ne dela :(

@Packač
ni ql, ker ne izpiše morebitnih napak

Zgodovina sprememb…

  • spremenilo: l0g1t3ch ()

keworkian ::

Kaksno napako pa dobis?
Obscenities in B-Flat

l0g1t3ch ::

Standard pač, da nemoreš nastavit headerja, ker je že bil nastavljen.

keworkian ::

Potem pa header() funckijo ven fukn, pa sam naredi xml, saj to je uver simple :)
Obscenities in B-Flat


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[PHP in/ali JS] skripta, ki gre cez celo stran in zamenja tekst med custom tagi

Oddelek: Izdelava spletišč
51122 (1028) jernejl
»

Optimizacija strani za mysgl bazo

Oddelek: Izdelava spletišč
131276 (1060) mjakop
»

PHP: kako bi zbrisal vse datoteke v podmapi TMP

Oddelek: Programiranje
101186 (1089) Cokolesnik
»

PHP in forme

Oddelek: Izdelava spletišč
101112 (926) Japonski
»

Html problemček

Oddelek: Izdelava spletišč
171449 (1290) Ziga Dolhar

Več podobnih tem