1

if(isset($_REQUEST['create_all']))
{
	$app_id = $_REQUEST['app'];
	$fullpath = array();
	$dir = dirname(__FILE__);
	
	
	foreach($language_array as $key_lang=>$name_lang)
	{
		$path = $dir."/uploaded_xml/".$app_id."/";
		
		if(!is_dir($path))
		{
			mkdir($path,0777);
			chmod($path,0755); 
		}
		
		
		$QUERY=mysql_query("select a.process_flag,a.field_id,a.field_name,a.xml_status,b.*,c.process_flag,b.lang_id from app_lang_fieldmaster_new a left join app_lang_translatetxt_new b on a.field_id=b.field_id left join app_lang_user_status c on a.field_id=c.field_id left join app_wise_lang_fields d on a.field_id=d.field_id where a.process_flag='0' and c.process_flag='6' and b.lang_id='".$key_lang."' and a.xml_status='1' and a.module_master_id='1' and d.app_id='".$app_id."' group by 2",$cont);
		
		
		//create the xml document
		$xmlDoc = new DOMDocument("1.0", "UTF-8");

		//create the root element
		$root = $xmlDoc->appendChild(
				  $xmlDoc->createElement("resources"));
		
		while($row=mysql_fetch_object($QUERY))
		{
			if($key_lang==9)
			{
				$xml_string = $xmlDoc->createElement( "string",trim($row->translate," "));
				$xml_string->setAttribute( "name",$row->field_name);
				$root->appendChild($xml_string);
			}
			else
			{
				$xml_string = $xmlDoc->createElement( "string",trim(base64_decode($row->translate)," "));
				$xml_string->setAttribute( "name",$row->field_name );
				$root->appendChild($xml_string);
			}
		}

		header("content-type: text/plain; charset=ISO-8859-15");

		//make the output pretty
		$xmlDoc->formatOutput = true;
		$string = $xmlDoc->saveXML();
		$handle = fopen($path.$name_lang.".xml","w");
		fwrite($handle,$string);
		fclose($handle);
		
		// $string = $xmlDoc->save($path.$name_lang.".xml");
		
		$fullpath[$key_lang] = $path.$name_lang.".xml";
	}
	
	
	ob_clean();
	flush();
	
	//zip file creation
	$zip = new ZipArchive();
	
	//zip file name
	$FilePath = $app_id.".zip";
	
	$full_path_zip = 'https://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/".$FilePath;
	
	//check if file exists if yes then delete
	if(file_exists(dirname(__FILE__)."/uploaded_xml/".$FilePath)) 
	{
		unlink (dirname(__FILE__)."/uploaded_xml/".$FilePath); 
	}
	
	//open zip file to add files to zip file
	if ($zip->open(dirname(__FILE__)."/uploaded_xml/".$FilePath, ZIPARCHIVE::CREATE) != TRUE) 
	{
		die ("Could not open archive");
	}
	
	
		//$zip->addFile("file_path","file_name");

	// loop through each file
	foreach($language_array as $key=>$name)
	{
		//add files to zip
		$zip->addFile($fullpath[$key],$name.".xml");
	}
	
	// close and save archive

	$zip->close();
	// header_remove();
	echo $full_path_zip;
	ob_clean();
	flush();
	$filename = dirname(__FILE__)."/uploaded_xml/".$FilePath;
	
	header('Cache-Control: public');  
	header('Content-Description: File Transfer');  
	header('Content-type: application/zip');
	header('Content-Disposition: attachment;   filename="'.$filename.'"');
	// echo dirname(__FILE__)."/uploaded_xml/".$FilePath;
	str_replace(".php",".zip",$filename);
	$file_content = file_get_contents($filename);  // To download the ZIP file
	print($file_content);	

}

i am creating a zip file which contains some xml files from server, i am adding that xml files to zip and then trying to download the zip but it is downloading .php file. here is my code

$xmlDoc = new DOMDocument("1.0", "UTF-8");

    //create the root element
    $root = $xmlDoc->appendChild(
              $xmlDoc->createElement("resources"));

    while($row=mysql_fetch_object($QUERY))
    {
        if($key_lang==9)
        {
            $xml_string = $xmlDoc->createElement( "string",trim($row->translate," "));
            $xml_string->setAttribute( "name",$row->field_name);
            $root->appendChild($xml_string);
        }
        else
        {
            $xml_string = $xmlDoc->createElement( "string",trim(base64_decode($row->translate)," "));
            $xml_string->setAttribute( "name",$row->field_name );
            $root->appendChild($xml_string);
        }
    }

    header("content-type: text/plain; charset=ISO-8859-15");

    //make the output pretty
    $xmlDoc->formatOutput = true;
    $string = $xmlDoc->saveXML();
    $handle = fopen($path.$name_lang.".xml","w");
    fwrite($handle,$string);
    fclose($handle);

    // $string = $xmlDoc->save($path.$name_lang.".xml");

    $fullpath[$key_lang] = $path.$name_lang.".xml";
}


ob_clean();
flush();

//zip file creation
$zip = new ZipArchive();

//zip file name
$FilePath = $app_id.".zip";

$full_path_zip = 'https://'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/".$FilePath;

//check if file exists if yes then delete
if(file_exists(dirname(__FILE__)."/uploaded_xml/".$FilePath)) 
{
    unlink (dirname(__FILE__)."/uploaded_xml/".$FilePath); 
}

//open zip file to add files to zip file
if ($zip->open(dirname(__FILE__)."/uploaded_xml/".$FilePath, ZIPARCHIVE::CREATE) != TRUE) 
{
    die ("Could not open archive");
}


    //$zip->addFile("file_path","file_name");

// loop through each file
foreach($language_array as $key=>$name)
{
    //add files to zip
    $zip->addFile($fullpath[$key],$name.".xml");
}

// close and save archive

$zip->close();`

here is my download zip file

$file_content = file_get_contents(dirname(__FILE__)."/uploaded_xml/".$FilePath);  // To download the ZIP file
header('Cache-Control: public');  
header('Content-Description: File Transfer');  
header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename="'.dirname(__FILE__)."/uploaded_xml/".$FilePath.'"');
echo $file_content;

it is downloading .php file with following content

PK    ”R—I+ Qý    
 Bulgarian.xml­”ÁnÓ@†ï}Š•ïP¸õ¤B J•Z‰pµ{’X²×ÑzàR ¢¤ŠBHo`ª˜†¤q_aöø×NÔÕ*nkÏÎ73ÿÌlk÷U‰—¤Ò0‘mçáýŽ é'A(ûmçù³½{;Îng«¥(M2åSÚÙ¢•j»^Lm§§B’AêFÝÈ]žå’§fÌ…à+3Âñ£ýà9O[Ûµ{3i˜E‘«WQq–â'32'|Å.jî‚sž ÌÜ   raÞØß%‡©äóM¡ü§«Œ»*ñßK5"|æÀNÌ1|s§Ù¨(³Ø푧3EnªÉ‹ôà0    ou­f,PzÁ?xʗͬHö‡iêÊDº²ïõÉ•®ï©JÅ3ÔqÁPr[ÏRÂOÏ8‡ cü<ÆyC©ûÒû/€’ÇÑA¥ä©yî-ù°êà°àíªµô*TèGYp¸¸ËŒó†…íË?H2ýt iÅGƒÖ#üú]~ÇßQ•Ã4XOúÝ+±GOŒl£,vnsÌÊä/øHû6<f‚/ïš6°÷šâÜsä8Z-¦ÔŸ<ß°WX€Úÿ‹²ù"IMêúö)V±lÚu¬Ùf÷=ϧ'¤É׉:ðºT=µ/ϬÄf$°9¹°/Žy_YÊk\k{íAûPK    ”R—I„üa[€  Î     Catalan.xml“ËN+1†÷<E”=—³c1„¸HH ±èa¹‰gj)—ÊI*x(6‡Gè‹áiT!¦=›(·ï÷Ûi®^ƒWkäL)ÎôŸ³­0Úä(ö3��w~z©¯Ú“†1§Ês{¢T“˹Šp¦;&Œ.¿ðfœëöÎg°flnÎwÄ4¼ªÞ›’c'¡–ƒ˜nçÄÀ
Öà½Z!«Ý¡žÖ³K(['Nà,ä¢Û[êj¦ÍÇ4µbTƒéJe4¹ ...

If i change the extension of downloaded file from .php to .zip it is working fine.

Kindly help thanks in advance...

1
  • readfile("$archive_file_name"); after headers insted of print_r() / echo and try once. Commented Dec 24, 2016 at 4:41

2 Answers 2

2

Remove this line: echo $file_content;

// To download the ZIP file
header('Cache-Control: public');  
header('Content-Description: File Transfer');  
header('Content-type: application/force-download');
header('Content-Disposition: attachment;
filename="'.dirname(__FILE__)."/uploaded_xml/".$FilePath.'"');
1
  • @user7334323, readfile("$archive_file_name"); after headers insted of print_r() / echo and try once. Commented Dec 24, 2016 at 4:41
0

Try this

$file_content = file_get_contents(dirname(__FILE__)."/uploaded_xml/".$FilePath);  // To download the ZIP file
header('Cache-Control: public');  
header('Content-Description: File Transfer');  
header('Content-type: application/force-download');
header('Content-Disposition: attachment;   filename="'.dirname(__FILE__)."/uploaded_xml/".$FilePath.'"');
20
  • have removed the echo $file_content; Commented Dec 23, 2016 at 11:09
  • echo this dirname(FILE)."/uploaded_xml/".$FilePath. Commented Dec 23, 2016 at 11:12
  • header('Content-type: application/zip'); Commented Dec 23, 2016 at 11:13
  • if i use echo $file_content it is downloading the .php extension file, and if i rename it to .zip it is working fine... can you tell me what will be the issue Commented Dec 23, 2016 at 11:13
  • replace your add this header('Content-type: application/force download '); to add this header('Content-type: application/zip'); Commented Dec 23, 2016 at 11:13

Not the answer you're looking for? Browse other questions tagged or ask your own question.