<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5120781757897409297</id><updated>2011-07-07T16:35:00.763-07:00</updated><category term='file upload'/><category term='captcha'/><category term='image'/><category term='php'/><category term='zend framework'/><category term='recaptcha'/><category term='security'/><category term='form'/><category term='multiple'/><title type='text'>Irmantas PHP, Zend Framework programming</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://irmantasplius.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5120781757897409297/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://irmantasplius.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Irmantas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_oO_JGspNLzI/SoasNseBjKI/AAAAAAAAAAM/pyGfIYETwIQ/S220/avatar.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5120781757897409297.post-3274331416256102823</id><published>2009-10-20T22:33:00.000-07:00</published><updated>2009-10-20T22:50:23.173-07:00</updated><title type='text'>Protect your email address from spam bots using jQuery</title><content type='html'>It is very useful to leave email address for your site visitors but damn spam bots finds them, and we get only not useful spam emails. But there is good way to protect your email address from spam bots using jQuery.&lt;br /&gt;&lt;br /&gt;First step where you want to display your email add &lt;span&gt;&lt;/span&gt;  with class "myemail" (you can change this) like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:html"&gt;&lt;br /&gt;&lt;span class="myemail"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now in html head, add script witch would append this span with your email address, witch is exploded in your javascript variables:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:javascript"&gt;&lt;br /&gt;$(function(){&lt;br /&gt; var _em_o = 'my';&lt;br /&gt; var _em_t = 'sec';&lt;br /&gt; var _em_th = 'ret';&lt;br /&gt; var _em_f = '@';&lt;br /&gt; var _em_fi = 'ema';&lt;br /&gt; var _em_s = 'il.';&lt;br /&gt; var _em_se = 'com';&lt;br /&gt; var anchor = $('&lt;a&gt;&lt;/a&gt;');&lt;br /&gt; anchor.attr('href', 'ma'+'il'+'to:'+_em_o+_em_t+_em_th+_em_f+_em_fi+_em_s+_em_se);&lt;br /&gt; anchor.text(_em_o+_em_t+_em_th+_em_f+_em_fi+_em_s+_em_se);&lt;br /&gt; $('.myemail').append(anchor);&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In additional you can use some kind of encoding to completely hide your email from damn spam bots.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5120781757897409297-3274331416256102823?l=irmantasplius.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://irmantasplius.blogspot.com/feeds/3274331416256102823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://irmantasplius.blogspot.com/2009/10/protect-your-email-address-from-spam.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5120781757897409297/posts/default/3274331416256102823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5120781757897409297/posts/default/3274331416256102823'/><link rel='alternate' type='text/html' href='http://irmantasplius.blogspot.com/2009/10/protect-your-email-address-from-spam.html' title='Protect your email address from spam bots using jQuery'/><author><name>Irmantas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_oO_JGspNLzI/SoasNseBjKI/AAAAAAAAAAM/pyGfIYETwIQ/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5120781757897409297.post-5774667120466589260</id><published>2009-10-01T11:40:00.000-07:00</published><updated>2009-10-01T12:10:55.397-07:00</updated><title type='text'>Secure your forms with Zend_Captcha captcha Part 2 reCaptcha</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_oO_JGspNLzI/SsT8HNfuPvI/AAAAAAAAACs/_s0A9oVDUFA/s1600-h/recaptcha.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 86px;" src="http://1.bp.blogspot.com/_oO_JGspNLzI/SsT8HNfuPvI/AAAAAAAAACs/_s0A9oVDUFA/s320/recaptcha.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5387708255053954802" /&gt;&lt;/a&gt;&lt;br /&gt;In last post I wrote that I would show you how to use reCaptcha service with your Zend Framework application. To use reCaptcha service you need service public key and private key. To get keys go to &lt;a href="http://recaptcha.net/"&gt;reCaptcha website&lt;/a&gt; and hit "Use reCAPTCHA on your site" red button on the bottom of the page and signup for free account. After sign up login to your reCaptcha account and create new reCaptcha key simply writing your website address. After creating new key you shoud get private and public keys.&lt;br /&gt;&lt;br /&gt;To use reCaptcha with your Zend Framework put reCaptcha keys in config file or difine as constants in your bootsrap file like I did.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;&lt;br /&gt;define('RECAPTCHA_PRIVATE_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');&lt;br /&gt;define('RECAPTCHA_PUBLIC_KEY', 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now in you form class create reCaptcha service object and add some options to it:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;&lt;br /&gt;//crate service object&lt;br /&gt;$recaptcha = new Zend_Service_ReCaptcha(RECAPTCHA_PUBLIC_KEY, RECAPTCHA_PRIVATE_KEY);&lt;br /&gt;//adding option, setting recaptcha theme to clean&lt;br /&gt;$recaptcha-&gt;setOption('theme', 'clean');&lt;br /&gt;//crate captcha object&lt;br /&gt;$captcha = new Zend_Captcha_ReCaptcha();&lt;br /&gt;$captcha-&gt;setService($recaptcha);&lt;br /&gt;&lt;br /&gt;//finaly create captcha options and create form element&lt;br /&gt;$capOptions = array(&lt;br /&gt; 'captcha'        =&gt; $captcha,&lt;br /&gt;);&lt;br /&gt;$this-&gt;captcha = new Zend_Form_Element_Captcha('captcha', $capOptions);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;To check if user submited valid capthca use following code:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;&lt;br /&gt;$recaptcha = new Zend_Service_ReCaptcha(RECAPTCHA_PUBLIC_KEY, RECAPTCHA_PRIVATE_KEY);&lt;br /&gt;$recaptchaResult = $recaptcha-&gt;verify(&lt;br /&gt; $this-&gt;_request-&gt;getParam('recaptcha_challenge_field'),&lt;br /&gt; $this-&gt;_request-&gt;getParam('recaptcha_response_field')&lt;br /&gt;);&lt;br /&gt;$postData = $this-&gt;_request-&gt;getPost();&lt;br /&gt;if ($this-&gt;form-&gt;isValid($postData) &amp;&amp; $recaptchaResult)&lt;br /&gt;{&lt;br /&gt;        //save your post data&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Thats it. If you have any questions aks them in comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5120781757897409297-5774667120466589260?l=irmantasplius.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://irmantasplius.blogspot.com/feeds/5774667120466589260/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://irmantasplius.blogspot.com/2009/10/secure-your-forms-with-zendcaptcha.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5120781757897409297/posts/default/5774667120466589260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5120781757897409297/posts/default/5774667120466589260'/><link rel='alternate' type='text/html' href='http://irmantasplius.blogspot.com/2009/10/secure-your-forms-with-zendcaptcha.html' title='Secure your forms with Zend_Captcha captcha Part 2 reCaptcha'/><author><name>Irmantas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_oO_JGspNLzI/SoasNseBjKI/AAAAAAAAAAM/pyGfIYETwIQ/S220/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_oO_JGspNLzI/SsT8HNfuPvI/AAAAAAAAACs/_s0A9oVDUFA/s72-c/recaptcha.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5120781757897409297.post-8355939526900554882</id><published>2009-09-30T11:40:00.000-07:00</published><updated>2009-10-01T02:46:12.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='captcha'/><category scheme='http://www.blogger.com/atom/ns#' term='image'/><category scheme='http://www.blogger.com/atom/ns#' term='form'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><category scheme='http://www.blogger.com/atom/ns#' term='zend framework'/><category scheme='http://www.blogger.com/atom/ns#' term='recaptcha'/><title type='text'>Secure your forms with Zend_Captcha captcha</title><content type='html'>&lt;img src="http://3.bp.blogspot.com/_oO_JGspNLzI/SsOr6WPcNjI/AAAAAAAAAB8/VG9zux6Bzic/s320/captcha.png" alt="Zend_Captcha_Image example" /&gt;&lt;br /&gt;&lt;br /&gt;While I'm working with my small project I'm testing various Zend Framework libraries. Today I would show how you can add captcha to your site using Zend_Captcha_Image. In next part of this post I would show how to implement reCAPTCHA with Zend_Captcha.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have a form class with variuos fields, to secure this class I would use Zend_Captcha_Image library. First should be created Zend_Captcha_Image object and set to it some parameters:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;&lt;br /&gt;class Form_MyForm extends Zend_Form&lt;br /&gt;{&lt;br /&gt; public function init ()&lt;br /&gt; {&lt;br /&gt; //other form elements&lt;br /&gt; // ....&lt;br /&gt;  &lt;br /&gt; //Captcha element&lt;br /&gt; $captcha = new Zend_Captcha_Image();&lt;br /&gt; //add font for your captcha&lt;br /&gt; $captcha-&gt;setFont('../../public_html/images/fonts/font'.rand(1, 14).'.ttf');&lt;br /&gt; //add image dir where your temproary captcha would be stored&lt;br /&gt; $captcha-&gt;setImgDir('../../public_html/images/captcha/');&lt;br /&gt; $captcha-&gt;setWordlen(5); //captvha word length&lt;br /&gt;       $captcha-&gt;setDotNoiseLevel(0); //set image noise level&lt;br /&gt;       $captcha-&gt;setLineNoiseLevel(2); //set image line noise level&lt;br /&gt; &lt;br /&gt; //set captcha options for form element&lt;br /&gt; $capOptions = array(&lt;br /&gt;  'captcha'        =&gt; $captcha,&lt;br /&gt;  'captchaOptions' =&gt; array('captcha' =&gt; 'Image')&lt;br /&gt; );&lt;br /&gt;&lt;br /&gt; //create form element&lt;br /&gt; $this-&gt;captcha = new Zend_Form_Element_Captcha('captcha', $capOptions);&lt;br /&gt; $this-&gt;captcha-&gt;setLabel('Security Code');&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Here is detailed steps of creating captcha:&lt;br /&gt;1. Create instance of Zend_Captcha_Image&lt;br /&gt;2. Set font. You can add multiple fonts and randomize them how is shown in my snippet for even more secure form.&lt;br /&gt;3. Set destination where temporary generated images should be stored.&lt;br /&gt;4. Set captcha code word length 5-8 I think is best.&lt;br /&gt;5. Set captcha image dot noise level in my example it is turned off.&lt;br /&gt;6. Set captcha image line noise level in my example it set to 2.&lt;br /&gt;7. Create array of options for Zend form element object.&lt;br /&gt;8. Finaly create Zend_Form_Element_Captcha object like regular form element.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5120781757897409297-8355939526900554882?l=irmantasplius.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://irmantasplius.blogspot.com/feeds/8355939526900554882/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://irmantasplius.blogspot.com/2009/09/secure-your-forms-with-zendcaptcha.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5120781757897409297/posts/default/8355939526900554882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5120781757897409297/posts/default/8355939526900554882'/><link rel='alternate' type='text/html' href='http://irmantasplius.blogspot.com/2009/09/secure-your-forms-with-zendcaptcha.html' title='Secure your forms with Zend_Captcha captcha'/><author><name>Irmantas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_oO_JGspNLzI/SoasNseBjKI/AAAAAAAAAAM/pyGfIYETwIQ/S220/avatar.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_oO_JGspNLzI/SsOr6WPcNjI/AAAAAAAAAB8/VG9zux6Bzic/s72-c/captcha.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5120781757897409297.post-868172122108559986</id><published>2009-08-18T14:00:00.000-07:00</published><updated>2009-10-01T02:43:42.183-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multiple'/><category scheme='http://www.blogger.com/atom/ns#' term='file upload'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='zend framework'/><title type='text'>Zend_Form multiple file uploads</title><content type='html'>This blog I'm starting with this mini tutorial. Recently I have started using Zend Framework as my main PHP framework. Testing it and playing with different components I decided to create something useful. I created simple form where users could upload more than one file, I started googling how to achieve this. Found some nice tutorials but they did not suited for my needs.&lt;br /&gt;After some time of experiments I ended with this code.&lt;br /&gt;&lt;br /&gt;In form class i created files fields by adding these lines of code in my class:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;&lt;br /&gt;//image upload field1&lt;br /&gt;$this-&gt;files = new Zend_Form_Element_File('files');&lt;br /&gt;$this-&gt;files-&gt;setLabel('Select files to upload')&lt;br /&gt;-&gt;setMultiFile(3)&lt;br /&gt;-&gt;addValidator(new Zend_Validate_File_IsImage)&lt;br /&gt;-&gt;addValidator(new Zend_Validate_File_Size('2MB'))&lt;br /&gt;-&gt;addValidator('Count', 3);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;With method setMultiFile() I added 3 file fields in my form. Next step is to check in controller if is post and if everything is valid. You can do this with standart isValid() form method. Next to get files and rename them in static or even dynamic directory you &lt;span style="font-weight: bold;"&gt;should not&lt;/span&gt; access data with form method getValues, if you do this all your uploaded files would be &lt;span style="font-weight: bold;"&gt;LOST&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Upload precess is quite simple here is example how you can upload rename files and place them in dynamic directory:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:php"&gt;&lt;br /&gt;view-&gt;form = new Form_NewItem('Submit');&lt;br /&gt; $request = $this-&gt;getRequest();&lt;br /&gt;&lt;br /&gt; //check if is post data&lt;br /&gt; if ($request-&gt;isPost())&lt;br /&gt; {&lt;br /&gt;  //get data and check if data is valid&lt;br /&gt;  $data = $request-&gt;getPost();&lt;br /&gt;  if ($form-&gt;isValid($data))&lt;br /&gt;  {&lt;br /&gt;   //get data from submited form&lt;br /&gt;   $name = $form-&gt;getValue('name');&lt;br /&gt;   $text = $form-&gt;getValue('title');&lt;br /&gt;  &lt;br /&gt;   //load model where data would be saved&lt;br /&gt;   $itemModel = new Model_Db_Item;&lt;br /&gt;  &lt;br /&gt;   $insertData = array&lt;br /&gt;   (&lt;br /&gt;    'name' =&gt; $this-&gt;getUserId(),&lt;br /&gt;    'text' =&gt; $webTitle,&lt;br /&gt;   );&lt;br /&gt;  &lt;br /&gt;   //save data and get unique id&lt;br /&gt;   $itemId = $itemModel-&gt;insert($insertData);&lt;br /&gt;  &lt;br /&gt;   //check if data is saved&lt;br /&gt;   if ($itemId)&lt;br /&gt;   {&lt;br /&gt;    //take transfer from form element&lt;br /&gt;    $adapter = $form-&gt;files-&gt;getTransferAdapter();&lt;br /&gt;    //APP_PUBLIC is set to my www public directory&lt;br /&gt;    $destination = APP_PUBLIC . '/uploads/'.(int)($itemId/100).'/'.(int)($itemId%100).'/';&lt;br /&gt;    //create directory where files would be hold&lt;br /&gt;    if (!file_exists($destination))&lt;br /&gt;     mkdir($destination, 0777, 1);&lt;br /&gt;   &lt;br /&gt;    $i=0;&lt;br /&gt;    //loop uploaded files&lt;br /&gt;    foreach ($adapter-&gt;getFileInfo() as $info)&lt;br /&gt;    {     &lt;br /&gt;     //rename file how you like and move it to given destination&lt;br /&gt;     $fileName = 'original_'.$i.'.jpg';&lt;br /&gt;     $adapter-&gt;addFilter('Rename', array('target'=&gt;$destination.$fileName, 'overwrite'=&gt;true));&lt;br /&gt;    &lt;br /&gt;     //if something goes wrong print errors in screen&lt;br /&gt;     if (!$adapter-&gt;receive($info['name']))&lt;br /&gt;     {&lt;br /&gt;      die(print_r($adapter-&gt;getMessages(),1));&lt;br /&gt;     }&lt;br /&gt;    &lt;br /&gt;     $i++;&lt;br /&gt;    }&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Thats it you can now upload multiple files in dynamic created directories. If you have any questions, do not be shy leave them in comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5120781757897409297-868172122108559986?l=irmantasplius.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://irmantasplius.blogspot.com/feeds/868172122108559986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://irmantasplius.blogspot.com/2009/08/zendform-multiple-file-uploads.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5120781757897409297/posts/default/868172122108559986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5120781757897409297/posts/default/868172122108559986'/><link rel='alternate' type='text/html' href='http://irmantasplius.blogspot.com/2009/08/zendform-multiple-file-uploads.html' title='Zend_Form multiple file uploads'/><author><name>Irmantas</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_oO_JGspNLzI/SoasNseBjKI/AAAAAAAAAAM/pyGfIYETwIQ/S220/avatar.jpg'/></author><thr:total>0</thr:total></entry></feed>
