Tak jsem se potýkal se stejnými problémy a marně jsem sem pořád nahlížel, zda-li se neobjeví nějaké to řešení. Marně. Musel jsem si, skoro jako vždy, poradit sám. Nuže, abych nepsal jenom často omílanou frázi "Mě to funguje bez problémů" a dál nic, podělím se tedy o řešení, které pomohlo odstranit chyby.
Výše popsané chyby lze odstranit dle návodu dle uživatele janholub, takže se jimi zabývat nebudu. Jde o to, aby se místo chybových hlášek zobrazil kýžený PDF soubor. Zkusil jsem pár možností systémem pokus-omyl a světe div se, vyšlo to.
1. Zjednodušil jsem úpravu souboru
rservice.php tím, že jsem obsah šablony
cla_uloz.php nakopíroval přímo do funkce, takže zápis v souboru
rservice.php vypadá asi takto:
function Uloz()
{
$odkaz =$_GET["cisloclanku"];
$clanek = mysql_query("select autor,link,titulek,uvod,text,datum from ".$GLOBALS["rspredpona"]."clanky WHERE link=\"".$odkaz."\"", $GLOBALS["dbspojeni"]);
$clanek2 = mysql_Fetch_Array($clanek);
$title = $clanek2["titulek"];
$uvodek = $clanek2["uvod"];
$textik = $clanek2["text"];
$textikk = "".$clanek2["uvod"]."<p></p>".$clanek2["text"]."";
// zde si můžete přidat další formátování a úpravu textu před jeho převodem do pdf
//$textikk = str_replace("co_prevest","na_co_prevest",$textikk);
// ---------------------
$pozice=strpos("x".$textikk,"<obrazek");
if ($pozice>0): // exsituje min. 1 znacky
$pozice--; // prevod na realnou pozici
$rotuj=1; // inic. rotace
while ($rotuj):
$retezec=substr($textikk,$pozice,60); // vykopirovani
$konec=strpos($retezec,">"); // konec znacky
$konec++; // pricitam 1 kvuli pocitani pozice od 0
$znacka=substr($retezec,0,$konec); // znacka
// zpracovani znacky
$atributy=str_replace("<obrazek ","",$znacka); // co,cim,kde
$atributy=str_replace(">","",$atributy);
$atributy=str_replace('"',"",$atributy);
$atributy=trim($atributy);
// sestaveni pole s atributy
$pole_atr=explode(" ",$atributy);
$pocet_atr=count($pole_atr);
// zpracovani pole atributu
$idobrazku=0;
$zaobrazku='center'; // prednastaveni atributu zarovnani
$nahled='ne'; // prednastaveni atributu nahled
$externi='ne'; // prednastaveni atributu externi
for ($pom=0;$pom<$pocet_atr;$pom++):
$jmeno="";
list($jmeno,$hodnota)=explode("=",$pole_atr[$pom]);
switch($jmeno):
case 'id': $idobrazku=mysql_escape_string($hodnota); break;
case 'zarovnani':
switch($hodnota):
case 'nastred': $zaobrazku='center'; break;
case 'vlevo': $zaobrazku='left'; break;
case 'vpravo': $zaobrazku='right'; break;
endswitch;
break;
case 'nahled': $nahled=$hodnota; break;
endswitch;
endfor;
// dotaz na obrazek
// data ziskana z interni galerie
$dotazobr=mysql_query("select nazev,obr_poloha,obr_width,obr_height,nahl_poloha,nahl_width,nahl_height from ".$GLOBALS["rspredpona"]."imggal_obr where ido='".$idobrazku."'",$GLOBALS["dbspojeni"]);
$pocetobr=mysql_num_rows($dotazobr);
if($pocetobr>0):
$pole_obrazek=mysql_fetch_assoc($dotazobr);
$odkaz_obrazek=$GLOBALS['rsconfig']['img_adresar'].$pole_obrazek["obr_poloha"];
endif;
// zpracovani obrazku
if ($pocetobr==1):
// bez nahledu
$sestavenyobr="<img src=\"http://www.vasserver.cz/".$pole_obrazek["obr_poloha"]."\">";
$textikk=str_replace($znacka,$sestavenyobr,$textikk);
else:
$textikk=str_replace($znacka,"<!-- obrazek id ".$idobrazku." nenalezen -->",$textikk);
endif;
// test na existenci dalsi znacky
$pozice=strpos($textikk,"<obrazek");
if ($pozice==0): $rotuj=0; endif; // konec kompilace znacek
endwhile;
endif;
// --------------------
$date = $clanek2["datum"];
$linkovnik = "view.php?cisloclanku=".$clanek2["link"]."";
$idcc = $clanek2["autor"];
$autor = mysql_query("select jmeno,user,email from ".$GLOBALS["rspredpona"]."user WHERE idu=\"".$idcc."\"", $GLOBALS["dbspojeni"]);
$autor2 = mysql_Fetch_Array($autor);
$autor3 = $autor2["user"];
$autor4 = $autor2["jmeno"];
$autor5 = $autor2["email"];
$autorv = "".$autor2["jmeno"]." - ".$autor2["email"]."";
require('html2pdf.php');
$pdf = new createPDF(
$textikk, // text pro převod do pdf
$title, // titulek článku
$linkovnik, // Url článku
$autorv, // autor článku
time()
);
$pdf->http='pdf/'; // nastavte složku, kam se budou vytvořené pdf ukládat
$pdf->directory='pdf/'; // nastavte složku, kam se budou vytvořené pdf ukládat
$pdf->delete=1; // nastavte, po kolika minutách se má pdfko smazat
$pdf->useiconv=false; // do not use iconv
$pdf->run();
}
Touto úpravou došlo ke zjednodušení a obejití souboru
cla_uloz.php, kterýžto se tak stal zbytečným a již není zapotřebí. Následně se po této úpravě vyřešil problém s automatickým přesměrováním na vytvořený PDF dokument.
Nicméně při ostrém nasazení nastala další chyba, a to taková, že server zakazoval vložit do PDFka hlavičkový obrázek
pozpdf.jpg a následně generoval další chybovou hlášku. Bylo mi řečeno, že je to zapříčiněno zapnutím
SAFE MODU, což je pochopitelné. Ale jak to vyřešit? Toť otázka. Opět metodou pokus omyl jsem testoval různé variace a už v úplném zoufalství jsem zkusil poslední možnost, zapnout funkci fopen wrapper, která zajišťuje vzdálené otevírání souborů ve skriptech.
POVEDLO SE A VŠE JE FUNKČNÍ.
Určitě se budete tázat kde se ona funkce fopen wrapper zapíná, na webhostingu SAVANA.cz je to v administraci vašeho účtu, takže si ji můžete aktivovat sami a na ostatních se budete muset dotázat technické podpory vašeho hostingu.
To by mělo být vše. Na závěr jen dodám, že existuje určitě pohodlnější a lepší způsob, jak dané chyby vyřešit, ale nikdo se zatím neobtěžoval řešení hodit do placu. Takže pokud ho máte
NENECHÁVEJTE SI HO PRO SEBE A PODĚLTE SE S NÍM S OSTATNÍMI.