#

Obelodanil sem prispevek o pretovrbi obvestil in opozoril v izjeme (PHP 5). Za sam izpis Exceptna skrbi malce bolj sofisticirana funkcija ki poleg opisa izjeme izpise se Stacktrace, celoten nabor Requst metod in Response header. Celotno zadevo si lahko tudi snamete dol. Mogoce bo komu prislo prav ... [PHP tanač ...]


všeč(0) ni všeč(0) spam(0)
#5

Mene zanima kako bi omejil oz. onemogočil št. downloadov enkrat, ko je oseba pobrala datoteko.



Primer: jst dam na page eno datoteko (recimo web template), ki jo nekdo kupi. Jst bi zdaj rad, da ko ta oseba izvrši plačilo dobi od mene link, si zdownloada datoteko in nato se link "zapre". Nekaj v tem stilu...



Tnx.




Simple ;)

Ce bos kasiral bos moral zavest upurabnika - predlagam ti kar zapis v bazo z potrebni podatki. (email, telefonska, ...) Ko dobis placilo najverjetneje bo to preko kakega elektronskega vira bos dobil obvestilo da je bilo narocilo uspesno izvedeno. Ponavadi takoj ob temu pride potrditev oziroma uparitev narocila. A je to XML-RPC, SOAP ali kaj drugega je odvisno kaj uporabljas kot placilno sredstvo - mas pa za vse zadeve API-je tako da ti tukaj ne bi smel biti problem. Ob uparitvi narocila zapises v doloceno tabelo kjer shranjujes narocila poleg userja, narocenega izdelka se en unique identifier npr: md5(uniqid(rand(), true)), nastavis flag da datoteka se ni bila downloadana in mogoce se datumsko omejis download - da ne traja 2 mesca po tem ko ti nekdo placa da dol potegne. nato se poslje temu userju mail z enolicnim likom: http://blalba/dolpoteg?uniqueid=32bitnizgenerirancharacter. Ko uporabnik dobi mail v njem ima navodila kako pa kaj. Ob kliku se v tabeli preverja ustrezni identifier ob pravilni avtentikaciji nastavis flag download na true in iz tega linka vec nobeden ne bo moral downlodad datoteke.



Kar se tice kaksne obstojece skripte bi se dalo najverjetneje kaj najti, ampak ti naj sluzi samo kot vzorec. Si si pa omislil kar lusten projektek ... Ce bos imel se kaksno vprasanje pa kar navali :)



LP


všeč(0) ni všeč(0) spam(0)
#

Ojla!



Imam eno vprasanje?! Vidim da vas kar precej programerjev pise bloge. Kako to da noben (razen Vinija - respect) ne objavlja kake tutoriale, tips & tricks, ugotovitve, code snippete ... za narodov blagor kot imajo to navado freelancerji iz tujine?!

Ticijo za tem kaksni tehtni razlogi ali se nobenemu ne ljubi tega pocet?!


všeč(0) ni všeč(0) spam(0)
#6

Kot sem rekel direktno ne bos mogel operirat z Wordovimi dokumenti v Linuxu (FreeBSD-ju).

Lahko si malce pomagas s temle linkom

http://www.linux.com/article.pl?sid=06/02/22/201247

kjer najdes nekaj command line toolsov ki znajo operirat z Wordovimi fajli in jih lahko tudi pretvoris v druge formate preko php-ja.

Ce pa se res ne mores ognit Worda pa napisi web servis v C# ki ti bo znal handlat word fajle: branje, konverzija, ... in ga obesi na nek IIS :)


všeč(0) ni všeč(0) spam(0)
#4

Pozabi ti na MS word ce bos to zaganjal na Linuxu in FreeBSD-ju! :) Ne vem zakaj se sploh ukvarjas z njim ce imas na voljo Open Office in OpenDocumentFormat (ODT), ki je v bistvi kompresiran XML. Malce poglej na web ziher je kdo napisal kaksen wraper oziroma parser za to. Mogoce ti bo tole kaj v pomoc ce bos pisal svoj parser:

http://books.evc-cit.info/oobook/book.html



Takole pa nekako zgleda content.xml

[HTML]

<?xml version="1.0" encoding="utf-8"?>

<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0"

xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0"

xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0"

xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0"

xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0"

xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0"

xmlns:xlink="http://www.w3.org/1999/xlink"

xmlns:dc="http://purl.org/dc/elements/1.1/"

xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0"

xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0"

xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0"

xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0"

xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0"

xmlns:math="http://www.w3.org/1998/Math/MathML"

xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0"

xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0"

xmlns:ooo="http://openoffice.org/2004/office"

xmlns:ooow="http://openoffice.org/2004/writer"

xmlns:oooc="http://openoffice.org/2004/calc"

xmlns:dom="http://www.w3.org/2001/xml-events"

xmlns:xforms="http://www.w3.org/2002/xforms"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

office:version="1.0">

<office:scripts />

office:font-face-decls

<style:font-face style:name="Helvetica"

svg:font-family="Helvetica" />

<style:font-face style:name="Tahoma1"

svg:font-family="Tahoma" />

<style:font-face style:name="Times" svg:font-family="Times" />

<style:font-face style:name="DejaVu Sans"

svg:font-family="'DejaVu Sans'"

style:font-family-generic="system"

style:font-pitch="variable" />

<style:font-face style:name="Tahoma" svg:font-family="Tahoma"

style:font-family-generic="system"

style:font-pitch="variable" />

/office:font-face-decls

<office:automatic-styles />

office:body

office:text

<office:forms form:automatic-focus="false"

form:apply-design-mode="false" />

text:sequence-decls

<text:sequence-decl text:display-outline-level="0"

text:name="Illustration" />

<text:sequence-decl text:display-outline-level="0"

text:name="Table" />

<text:sequence-decl text:display-outline-level="0"

text:name="Text" />

<text:sequence-decl text:display-outline-level="0"

text:name="Drawing" />

/text:sequence-decls

<text:p text:style-name="Standard">Tole je Open Office dokument!/text:p

/office:text

/office:body

/office:document-content

[/HTML]


všeč(0) ni všeč(0) spam(0)
#23

Ja, s tem da še nevem kako naj rešim, nalaganje, včasih se zarad adsa sploh ne naloži moj, page ... traja v nedogled ... v ko 4 sec, je že zelo hudo ... kako si ti to rešil ? Frame ?




Pri oglasih gre ponavadi za javascript ki se nalozi iz streznika ponudnika. Kot si omenil stran caka dokler se skripta ne nalozi. Hujse je se ce streznik ki servisira oglase crkne in se tebi prakticno stran ustavi dokler ne dobi browser odgovora za time out. Nas-t1 je predlagal da das oglase bolj dol, kar bi res hitreje prikazalo stran, zate pa ni sprejemljiva resitev, saj zelis imeti oglase cim bolj vidne ;)

Tukaj sem podal resitev, ki nalozi eksterne skripte v head HTML dokumenta.

Podobno lahko resis da se ti oglasi zacnejo nalagat ko je browserjev DOM na voljo. Stran je lepo vidna, nato pa se naj oglasi se lepo v miru nalozijo.


všeč(0) ni všeč(0) spam(0)
#7

Ne poznam (se) wordpressov template sistem, ampak ce lahko sklepam po ostalih so vec ali manj zasnovani enako.



To kar ti zelis ni nic drugo kot nek helper oziroma funkcija ki jo klices iz templata.



Ali imas to reseno kot tag ali ne princip je isti.



[HTML]

//z tagom

<div>{menu level="top"}</div>

//brez

<div><?php echo $this->menu(array('level' => 'top') ?></div>

[/HTML]


/**
* Generate menu
* @param array $params
* @return string
*/
public function menu($params)
{
$level = (array_key_exists('level', $params)) ? $params['level] : 'top';
//menu level
$db = ....
//database adapter
$level = $db->quoteInto('level = ?', $level);
$rows = $db->execute("SELECT id, title FROM menu WHERE $level");
if ($rows) {
$menuStr = "<ul>\n";
foreach ($rows as $row) {
$menuStr = "<li class=\"$level\"> ...</li>\n";
}
$menuStr .= '</ul>';
}
return $menuStr;
}
všeč(0) ni všeč(0) spam(0)
#2

Imam 2 vprašanja,

1.) Kako zaščititi datoteko pred downloadnjem ? Da bi lahko samo z moje strani downloadali, ne pa z vsepovsod ? Tako da zakodiram url ? Recimolol.com/file.php?file=1 potem pa s header ... ? Ali kako drugače ?




Hmm ;)

Nisem se tega pocel ampak ce bi se spravil programsko resevat ta problem bi razmisljal v tej smeri:

a) datoteke ki bi bile namenjene za download bi vrgel v direktorij kateri nima direktnega dostopa -> .htaccess

b) dodatna varnost - transcriptor datotek in njihovi ustrezni md5 hashi.

c) v scripti file.php ki je wraper za download bi preverjal ali se upurabnik nahaja na ustrezni strani in dodatno moznost ce ima ustrezne pravice -> lahko tudi se preden se dejansko klice ta datoteka -> Ajax.

d) po ustrezni avtorizaciji userja (sem na pravi strani + imam pravice) force download datoteke preko skripte file.php + zapis v download.log - poglej v php manual kako mores nastaviti headerje.




2.) Druga stvar pa je, kako s PHP izpisati Word file ? .doc datoteke od MS Offlice, naredil bi namreč rad možnost, porenes ali oglej, tako še dobim vsebino indexirano :).




Tudi tega se nisem delal :) Php ima vgrajeno podporo za COM (Component Object Model) ki pa dela samo na windows platformi se razume.

z ukazom $word = new COM("word.application") dvignes wordov object, ce ga imas seveda instaliranega na compu ... poglej v manual. Zakaj tocno bi rad izpisoval wordove datoteke?! Nimas na izbiro drugega formata za branje?!


všeč(0) ni všeč(0) spam(0)
#5

:)

Zdi se mi potratno da bi nekdo sel izumljat toplo vodo, v tem malem morju temlate jezikov, poleg tega pa je tukaj php ki opravi svoje delo vec kot odlicno. Ce pa zares zelis blizje spoznati ta svet ti vseeno priporocam da si ogledas Smarty ... kot sem ze prej napisal obstaja malo morje zadev za njega pa tudi sam lahko hitro napises kaksno zadevico.



Navedel ti bom primer pre plugina. To je dolocena skripta, ki se izvede preden se poslje template v obdelavo Smarty parserju. Primeri takih filtrov so ce zelis npr odstraniti odvecne komentarje iz kode, popraviti slovnicne napake z Dictionarijem ... Ta primer plugina v kodi najde inline Javascript in z uporabo

JsMin classa ven pomece odvecno saro-> komentarje, presledke, vrstice ...



plugin registriramo ob inicializaciji smarty-ja:

...


$smarty = new Smarty();
$smarty->load_filter('pre', 'jsMin');

Kot vidimo (glej spodaj) je celoten inline Javasript obdan z custom Smarty tagom {jsMin}{/jsMin}. V kodi opazimo tudi tag {t}{/t} ki je bil registriran kot block funkcija ki prevede del znotraj taga (wraper je lahko razlicen: cvs, xml, Gettext) ... mogoce o tem vec kdaj drugic :) Vsi smarty tagi znotraj javascripta so obdani z dodatnima oklepajima {} ker s tem dolocimo pozneje v funkciji JsMin, katere dele kode naj smarty ne parsa. Ja sam Smarty ne prebavlja embendanega Javascripta in CSS-ja in mu je potrebno povedat eksplicitno kako pa kaj.



Poglejmo sedaj funkcijo.


/**
* Mimize embanded JsScript
*
* @uses _jsMin
* @param string $tplSource
* @param object $smarty
* @return string
*/
function smarty_prefilter_jsMin($tplSource, &$smarty)
{
$regex = "/\{jsMin\}(.*?)\{\/jsMin\}/s";
return preg_replace_callback($regex, _jsMin, $tplSource);
}
/**
* Does the hard work
*
* @param array $m
* @return mixed
*/
function _jsMin($m) {

$jScript = $m[1];
//Jscript without {jsMin} is second

$jScript = preg_replace('/{{/', '{/literal}{', $jScript);
$jScript = preg_replace('/}}/', '}{literal}', $jScript);
//do not interprate display as is

/**
* javascript packer
*/
require_once 'jsmin.php';
$jScript = JSMin::minify($jScript);

$result = "{literal}<script type=\"text/javascript\">\n";
$result .= $jScript . "\n";
$result .= '</script>{/literal}' . "\n";

return $result;
}

Na kratko: Z regEx dobimo ven celotno vsebino ki je med {jsMin} tagom. Ce je znotraj se kaksen smarty tag insertamo literal in dobimo {/}literal{tag}{literal}, posljemo vsebino skozi Jsmin jo obogatimo z script tagom in vrnemo nazaj smartyju :)



Template izgleda priblizno takole:

[HTML]

{jsMin}

function employerRegister(formId) {

var valid = new Validation(formId, {onSubmit:false,immediate:true,stopOnFirst:true} );

Validation.addAllThese([

['required', '{{t}* Polje mora biti izpolnjeno.{/t}}', function(v) {

return !Validation.get('IsEmpty').test(v);

}],

['validate-number', '{{t}* V to polje vpišite samo številke.{/t}}', function(v) {

return Validation.get('IsEmpty').test(v) || (!isNaN(v) && !/^\s+$/.test(v));

}],

['validate-email', '{{t}* Vpišite veljaven elektronski naslov. Primer fred@domain.com .{/t}}', function (v) {

return Validation.get('IsEmpty').test(v) || /\w{1,}[@][\w-]{1,}(.){1,3}$/.test(v)

}]

}



}

{/jsMin}

[/HTML]



Smarty dobi:

[HTML]

{literal}<script type="text/javascript">

function employerRegister(formId){var valid=new Validation(formId,{onSubmit:false,immediate:true,stopOnFirst:true});Validation.addAllThese([['required','{/literal}{t}* Polje mora biti izpolnjeno.{/t}{literal}',function(v){return!Validation.get('IsEmpty').test(v);}],['validate-number','{/literal}{t}* V to polje vpišite samo številke.{/t}{literal}',function(v){return Validation.get('IsEmpty').test(v)||(!isNaN(v)&&!/^\s+$/.test(v));}],['validate-email','{/literal}{t}* Vpišite veljaven elektronski naslov. Primer fred@domain.com .{/t}{literal}',function(v){return Validation.get('IsEmpty').test(v)||/\w{1,}[@][\w-]{1,}(.){1,3}$/.test(v)}],['validate-password','{/literal}{t}* Vaše geslo mora biti daljše od 5 znakov in ne sme biti enako vašemu E-mail naslovu.{/t}{literal}',{minLength:5,notEqualToField:'employerEmail'}],['validate-password-confirm','{/literal}{t}* Ponovljeno geslo se ne ujema z vpisanim. Ponovno vnesite vaše geslo.{/t}{literal}',{equalToField:'employerPassword'}]]);var result=valid.validate();if(result==false){$('errorDiv').style.display='block';$('errorH1').innerHTML='{/literal}{t}Registracija novega delodajalca - napaka!{/t}{literal}';}else{alert('submit');}}

</script>{/literal}

[/HTML]



HTML source v browserju pa izgleda enako le da nima {literal} tagov.



Velika vecina razvijalcev uporablja template sisteme ne zaradi tega da v php-ju nastavijo spremenljivko assign->misko = "wow super je tole" ampak da si predvsem olajsajo zadeve s tem da si postopoma pripravijo razne plugine, helperje, filtre ki jim potem z pridom uporabljajo!



LP


všeč(0) ni všeč(0) spam(0)
#6

Se opravicujem ;) sem dvakrat ista fajla primerjal z Araxisom. My bad :(


všeč(0) ni všeč(0) spam(0)