Documenten tonen bij responsive

Status
Niet open voor verdere reacties.

weswillem

Gebruiker
Lid geworden
8 nov 2011
Berichten
310
Bezig om de site responsive te maken, het geen aardig is gelukt. Nu wil ik op mijn telefoon een document downloaden en lezen, maar krijg allemaal rare tekentjes te zien. Iemand bekend hoe dat werkt of hoe je juiste format krijg van een word- of pdf file.
 
Bezig om de site responsive te maken, het geen aardig is gelukt. Nu wil ik op mijn telefoon een document downloaden en lezen, maar krijg allemaal rare tekentjes te zien. Iemand bekend hoe dat werkt of hoe je juiste format krijg van een word- of pdf file.
Juiste mime-type meegeven als header met PHP.

Laat je relevante PHP-code eens zien?
 
Bij deze, PHP4U

PHP:
if ($good == true ) {
					$omschrijving=trim($_POST['omschrijving']);      
                    $allowedExts = array("pdf", "docx", "doc");
                    $extension = end(explode(".", $_FILES["file"]["name"]));
                    if (($_FILES["file"]["type"] == "application/pdf")
                        || ($_FILES["file"]["type"] == "application/vnd.openxmlformats-officedocument.wordprocessingml.document")
                        || ($_FILES["file"]["type"] == "application/msword")
                        && ($_FILES["file"]["size"] < 2000000)
                        && in_array($extension, $allowedExts))                
            {
            if ($_FILES["file"]["error"] > 0){
                echo '<font color: red> '.$_FILES["file"]["name"]. '</font> --is geen pdf, doc, docx of rtf-file en wordt daarom niet op de server geplaatst<br>';      
                //echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
            }else{

PHP:
}else if ( isset ($_GET['p']) && $_GET['p'] == "download") { 
    $filetitel = $_GET['file'];
               if (is_file("folders/".$filetitel)){           
                    header("Content-Type: application/octet-stream; "); 
                    header("Content-Transfer-Encoding: binary"); 
                   //header("Content-Length: ". filesize($filetitel).";"); 
                  header("Content-disposition: attachment; filename=" . $filetitel);
  	    readfile("folders/".$filetitel);
        }
}

Moet het dan zo worden.
En moet voor elke type document dat toegevoegd worden?
PHP:
}else if ( isset ($_GET['p']) && $_GET['p'] == "download") { 
    $filetitel = $_GET['file'];
    if (is_file("folders/".$filetitel)){
      header("Content-Type: application/octet-stream; "); 
        header("Content-Transfer-Encoding: binary"); 
        header("Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document;"); 
        header("Content-disposition: attachment; filename=" . $filetitel);
  	readfile("folders/".$filetitel);
        }
}
 

Bijlagen

  • was2.jpg
    was2.jpg
    103,1 KB · Weergaven: 33
  • was1.jpg
    was1.jpg
    71,5 KB · Weergaven: 34
Laatst bewerkt:
Hmm... en dat gebeurt alleen op je telefoon?
 
Op mijn telefoon, zie de plaatjes.
Op mijn laptop het probleem dat het OFFICE OPEN XMLbestand
niet kan worden geopende omdat er problemen met de inhoud zijn.
Klik op Oke dan krijg ik de melding
-Word heeft onleesbare inhoud aangetroffen. Herstellen?
That's it. Het is het laatste stukje van de site dat niet werkt.
b.v.d. Thijs voor de respons
 
Wat voor bestandnaam is het? En heb je een voorbeeld (desnoods met dummy inhoud) online staan?
 
Ik heb alles online staan qua documenten. het zijn word document met de extensie .docx
Helaas kan ik je niet mailen voor inlogging op wasdeleyens.nl/test.
Je kan mij mailen via die site.
 
Waarom niet gewoon dit doen:

Code:
<?php
$bestand= 'blaat.docx';

if (file_exists($bestand)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename="'.basename($bestand).'"');
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Pragma: public');
    header('Content-Length: ' . filesize($bestand));
    readfile($file);
    exit;
}
?>
Dan kan de gebruiker zelf bepalen waarmee hij het wilt openen.
 
Deze werkt zo wel, alleen retourneerd een leeg document.
Ik laat het ff rusten, ben al een paar dagen daarmee bezig.
ff hoofd leegmaken.
 
Laatst bewerkt:
Zorg dat de filesize goed berekend wordt. Als deze niet goed is berekend, dan kan het bestand beschadigd raken.
 
ik bekijk even dat stukje code

PHP:
}else if ( isset ($_GET['p']) && $_GET['p'] == "download") { 
    $filetitel = $_GET['file'];
    if (is_file("folders/".$filetitel)){
      header("Content-Type: application/octet-stream; "); 
        header("Content-Transfer-Encoding: binary"); 
        header("Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document;"); 
        header("Content-disposition: attachment; filename=" . $filetitel);
    readfile("folders/".$filetitel);
        }
}
nu benader je dat best als array
dit maakt dat je geen fouten kan maken met headers Content-Type: (vis is geen vlees en vlees is geen vis dus het is vis of vlees niet allebij)
PHP:
$headers['Content-Type']='application/vnd.openxmlformats-officedocument.wordprocessingml.document';
foreach($headers as $key=>$value){
     header("$key: $value;"); 
}
 
Dus dan wordt het zo iets, Tijs
PHP:
if (is_file($filetitel)){ //aanwezig in downloads?
   $headers['Content-Disposition']: 'attachment; filename=' $filetitel;
   $headers['Content-Type']:'application/pdf';
   $headers['Content-Type']:'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
   $headers['Content-Type']:'application/force-download';
   $headers['Content-Type']:'application/octet-stream';
   $headers['Content-Type']:'application/download';
   $headers['Content-Type']:'File Transfer';
   $headers['Content-Transfer-Encoding']:'Binary';            
   $headers['Content-Lenght']:''. filesize($filetitel));
foreach($headers as $key=>$value){
   header("$key: $value;");   
 }
   readfile($filetitel);
    exit;
}
was het niet dat de 1e regel van de $headers een syntax fout geeft.
hoop alleen dat het gedownloade document wel de zelfde grootte heeft.
Voorlopig geeft het aan dat het maar 2,1 kb is van de juiste grootte 18,4 kb
 
Laatst bewerkt:
tja ik ben nog niet duidelijk geweest denk ik

eerst en vooral is er de gelijk aan teken

$headers['Content-Type']='application/pdf';
$headers['Content-Type']='application/vnd.openxmlformats-officedocument.wordprocessingml.document';
$headers['Content-Type']='application/force-download';
$headers['Content-Type']='application/octet-stream';
$headers['Content-Type']='application/download';
$headers['Content-Type']='File Transfer';

nu wordt het enkel de laaste gebruikt en dat is niet juist

zo zou het je het kunnen doen maar dan heb je het packet nodig

private function get_FileMime($filename){
//$fileatt_type = mime_content_type($filename);(OLD CODE)
//application/octet-stream
$finfo = finfo_open(FILEINFO_MIME_TYPE);// return mime type ala mimetype extension
return finfo_file($finfo, $filename);
}

maar dan moet je het in de array plaatsen en dit maakt dat je maar één contenttype kan hebben.
zoals bvb één van ...
text/html,application/ms-word,application/vnd.openxmlformats-officedocument.wordprocessingml.document

extra ref
http://php.net/manual/en/function.mime-content-type.php
 
Laatst bewerkt:
Tijs,

Ik waardeer ten zeerste uw hulp en toewijding.
Ik moet eerlijk bekennen dat ik mij een hoop eigen heb gemaakt
om alles te doorgronden qua code.
Maar ik heb ff nu het gevoel dat dit net boven de pet ga, sorry.
 
Laatst bewerkt:
na diverse codes van internet te hebben gehaald en geprobeerd te hebben
is het me nog steeds niet gelukt om een docx bestand foutloos te openen.
blijf het probleem houden dat het OFFICE OPEN XMLbestand
niet kan worden geopend.
de grootte van het gedownloade document blijft anders dan
het orgineel.
Iemand nog andere ideeen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan