czeski błąd przy zapisywaniu danych do pliku

0

Witam

siedzę od wczoraj nad dziwnym błędem otóż w pętli pobieram z zapytania SQL dane i zapisuje do pliku tekstowego. Separatorem jest tabulator a kazde zakonczenie lini jest takie : \r\n

Wszystko wydaje się ok, na końcu kodu jest oczywiście header :

    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false);
    header("Content-Type: application/force-download");      //default -- application/force-download
    header("Content-Disposition: attachment; filename=$filename");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".@filesize($path_file_export));
    set_time_limit(0);
    readfile($path_file_export); 

Gdy otwieram plik z "okienka" pomiędzy początkiem pliku a danymi są entery. Dziwne ? bo fopen jest ustawiony na : $fd= fopen($path_file_export,"w+");

Cuduje, kombinuje i nic białe znaki jak są tak są, co sie dzieje. Najlepsze jest to że dzieje się to tylko przy otwieraniu pliku z okienka, natomiast na dysku plik zapisany jest prawidłowo

0

Co rozumiesz jako "otwieranie pliku z okienka"? Pokaż cały kod zapisu lub uploaduj przykładowy plik.

0

... gdy ściągasz jakikolwiek plik wyświetla się okienko, które pyta gdzie zapisać plik, czy otworzyć....

0

a może podczas otwierania "z okienka" plik zostaje wyświetlony w innym edytorze niż normalnie?
najlepiej będzie jak pokażesz cały kod

0

... wyciolem wszystko co sie da, zostawlem najpotrzebniejsze rzeczy i dalej to samo, czegos takiego jeszcze nie widzialem, oto kod :

<?php
    error_reporting(0);   
    session_start();
    
	require_once("funkcja.php");   
    Connect_db();
	    	
	$tab_login= explode("\\",$_SERVER['LOGON_USER']); 
	$filename_file= $tab_login[1]." ".date("Y-m-d H-i-s").".txt";  
	$path_file_export= str_ireplace("katalog\test_file.php", "export", $_SERVER['SCRIPT_FILENAME'])."\\".$filename_file; 			  										    	 
		
	$ERROR_CHECK= 1;
	$lan_save= "";	
	foreach($_SESSION['id_klient'] as $key => $item)	  
	{  	 
			$sql_data_export= "zapytanie SQL";	
			$result_data = mssql_query($sql_data_export);  
		  							  						
		 	$fd= fopen($path_file_export,"w+");		     				       
		 		
		 	if( $result_data )
		 	{		
				 	while($tab_val= mssql_fetch_array($result_data,MSSQL_NUM))
				 	{
					 		$lan= "test";
														
					 		$lan_save .= $lan."\r\n";		     		   	  
				 	} 	
																	       									        
				  	fputs($fd,$lan_save);
		 	}
		 	else
		 	{
		 		$ERROR_CHECK= 0;	--jesli blad petla zatrzymywana
		 	}
		 	
		    fclose($fd); 	     	
	}		
				
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private",false);
    header("Content-Type: application/force-download");      //default 
    header("Content-Disposition: attachment; filename=$filename_file");
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: ".filesize($path_file_export));
    set_time_limit(0);
   	readfile($path_file_export); 
?>
0

krok po kroku doszedlem niemal ze do konca kodu zrodlowego, czyli header; zmienilem go na :

    header ("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header('Content-Description: File Transfer');
    header('Content-Type: application/force-download');   //octet-stream 
    header('Content-Length: ' . filesize($path_file_export));
    header('Content-Disposition: attachment; filename='.$filename_file);
    //readfile($path_file_export); 

Funkcja readfile celowo jest w komentarzu bo to ona sprawia klopot, nie wiem dlaczego gdy otwieram plik z serwera, gdzie zapisany jest prawidlowo, tu wstawia entery, dopiero pozniej sa dane

0

a próbowałeś inną funkcją? np file_get_contents?

0

podalem echo file_get_contents($path_file_export); i wciaz bez zmian !

0

Zajrzyj do pliku funkcja.php, może tam masz na początku/końcu 2 entery

1 użytkowników online, w tym zalogowanych: 0, gości: 1