יום שישי, יולי 16th, 2010 | יוצר: admin

בשרתים שעובדים עם IIS יש אופציה להשתמש בהזדהות מסוג BASIC ו DIGEST (יש עוד כמה סוגים שלא אפרט כאן, תוכלו לקרוא בויקיפדיה)

יצא לי לאחרונה לעבוד מול שרת כזה, כאשר אני מתחבר עם יוזר וסיסמא הכל עובד טוב, אבל כמובן שאני מריץ סקריפט PHP אכן יש בעיית הזדהות.
סה"כ מה שצריך זה לשולח את ה Headers הנכונים בצורה הבאה:

function startMyDigestAuth($username,$password)
{
$data=array("NAME"=>"VALUE"); //Data to send: can be for example: array("page"=>"data","val1"=>"tables","val2"=>"soccer"); 

$headers[] = 'Accept: */*'; //I`m not sure if we realy need it, I didn't try without yet. 

$poster = curl_init($fullurl); //strating curl_init 

 //sending Headers
curl_setopt($poster, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($poster, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($poster, CURLOPT_TIMEOUT, 60);
curl_setopt($poster, CURLOPT_HTTPHEADER, $headers ); //the $headers
curl_setopt($poster, CURLOPT_HEADER, 0); //0 means that we don't want to see header output
curl_setopt($poster, CURLOPT_USERPWD, $username.":".$password); //sending username & password
curl_setopt($poster, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); //DIGEST (there are more options)
curl_setopt($poster, CURLOPT_CUSTOMREQUEST, 'POST'); //Posting
curl_setopt($poster, CURLOPT_RETURNTRANSFER, true); //return data on curl_exec
curl_setopt($poster, CURLOPT_POSTFIELDS, $data); //send POST 

$raw_response = curl_exec($poster); //execute
$httpcode = curl_getinfo($poster,CURLINFO_HTTP_CODE);  //check what code we are getting: 200(OK) 401(FORBIDDEN) 404(NOT FOUND) etc , return integer
curl_close($poster); //close curl 

return ($httpcode==200) "Cool we are OK":"Error code: $httpcode";
}
$username="OTHERDOMAIN\SomeUserName";
$password="ourPass123"; 

echo startMyDigestAuth($username,$password);

מדריך שמאוד עזר ודי פתר לי את הבעיה:
http://curl.haxx.se/mail/curlphp-2007-08/0030.html?

קטגוריות: Authentication, PHP Hacks |  השאר תגובה
יום חמישי, מאי 13th, 2010 | יוצר: admin

הרבה פעמים עולה מצב שבו צריך לעבוד עם כל מיני שפות בעולם, ולצערנו אנחנו לא בדיוק יודעים לדבר גרמנית או רוסית, אולי יפנית.

בעבר היינו צריך להשתמש בטבלאות, כאשר יש את טבלת ה ASCII וההרחבות שלה.
כאשר אנחנו מתקינים את מערכת ההפעלה שלנו ובוחרים שפות לתמיכה, רק עם השפות הללו נוכל להשתמש באמת, ז"א שמערכת ההפעלה שלנו (כנראה, תלוי במערכת ההפעלה) תרחיב את הטבלה שלה ותכיר את כל האותיות הקיימות.

אז בעצם מה עושים במידה עוד…

יום שישי, אפריל 30th, 2010 | יוצר: admin

כמה בעיות אינטרנט אקספלורר 6 גרם נו? כל זמן שאני מגיע לעבודה שקשורה אליו אני פשוט לא מבין למה הוא קיים, היה עדיף להישאר עם 5.5 כבר… אז מצאתי את הפתרון או יותר נכון חבר טוב שלי מצא את הפתרון, הוא כ"כ פשוט, אתם לעולם לא תסבלו מCSS וכל מה שקשור אליו ב IE6!

אתם בטח שואלים "איך?!@#$"

אז ככה… התשובה הברורה תמצא בקישור הבא, כאשר תפתחו אותו ב – IE6:

http://ayalim.loo.co.il/

או לחילופין פשוט תכנסו לתמונה הזאת

אם כמה אתרים באמת גדולים היו עושים את זה, אין ספק שהיינו רואים אותו כבר בחוץ.. וזה די פשוט לעשות את זה:

</p>
<p>    //validate ie 6</p>
<p>    if  (isset($_SERVER['SERVER_NAME']) &&</p>
<p>     (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE)){</p>
<p>     header('Location: http://<strong>www.yourwebsite.com</strong>/killIE6.html');</p>
<p>     die();</p>
<p>    }</p>
<p>

(הזכויות שמורות לloo)

[עריכה]


מסתבר שיש סוג של "באג" כאשר אנחנו עובדים עם Internet Explorer (כמה מפתיע)

אינטרנט אקספלורר שולח את ה user agent שלו (שזה בעצם מה שמזהה את הדפדפן) דרך ה registry של ה – Windows, המשמעות היא שאפשר לשנות את ה user agent ע"י regedit או תוספים שונים.
ואז במקום לזהות את הדפדפן בתור IE8 לדוגמה, נזהה אותו גם וגם, לדוגמה:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; GTB5; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.1.4322; OfficeLiveConnector.1.4; OfficeLivePatch.1.3)

אם נשים לב בהתחלה אנחנו ניראה MSIE8.0 אבל לאחר מכן MSIE 6.0 ואז הסקריפט שלנו לא יעבוד.
כעקרון ה user agent לא אמור להחזיר את MSIE6 אבל לצערנו יש תוספים שנוגעים כמו שרשמתי למעלה.

באינטרנט אקספלורר 9 ה user agent לא ישלח דרך ה registry. (כך גם עובדים כרום ופיירפורקס).
עוד פרטים אפשר למצוא בבלוג של מיקרוסופט

אז מה התיקון? פשוט מאוד:

    if  (isset($_SERVER['SERVER_NAME']) &&
     (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE) &&
            (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 8.') === FALSE) &&
                   (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.') === FALSE)) {

בסה"כ הוספתי לתנאי שלנו מצב שבו יש אך ורק IE6.
בהצלחה

ולידיעת הגולשים, מסתבר שמיקרוסופט החליטה החלטה נבונה וכנראה שבסביבות יולי הקרוב היא תפסיק לתמוך רשמית ב – IE6!

http://support.microsoft.com/gp/lifesupsps/#Internet_Explorer

יום שבת, אפריל 24th, 2010 | יוצר: admin

לאחרונה נתקלתי בבעיה ליצור קובץ CSV שתומך בעברית.

עברתי על רוב הפתרונות המוצעים בגוגל שכוללים בניהם שימוש ב fputcsv וכל מיני תוספים שונים.

בסופו של דבר הבנתי שעדיף פשוט להשתמש ב fwrite עם מספר תוספים שמצאתי בחיפושים…

חשוב:

  1. לא לשכוח להשתמש ב ()utf2heb בייצוא הקובץ.
  2. להשתמש ב fwrite ולא ב fputcsv
  3. עריכה: המחשב חייב לתמוך בשפה עברית כברירת מחדל

replace utf8 to windows1255 (CSV Files does NOT support utf8)

<br />
function utf2heb($val)<br />
{<br />
    return iconv("UTF-8","WINDOWS-1255",html_entity_decode($val,ENT_COMPAT,'utf-8'));<br />
}</p>
<p>$filename=YOUR FILE;<br />
function csv($res)<br />
{<br />
	global $filename</p>
<p>	$fp = fopen($filename, 'w+b');</p>
<p>	$str="תא 1,תא 2,תא 3\r\n"; # צריך לשים לב שמשתמשים ב \r\n ולא \n בגלל שמשתמשים ב csv.<br />
	fwrite($fp,$str); </p>
<p>	foreach ($res as $line)<br />
	{<br />
		$str="";<br />
		foreach($line as $key=&gt;$val)<br />
				$str.="$val,";</p>
<p>		fwrite($fp,substr($str,0,-1)."\r\n"); # הורדתי את הפסיק האחרון.... ואז צריך לרדת שורה<br />
	}<br />
        fclose($fp);</p>
<p>}

עכשיו אחרי שיצרנו את הקובץ, אפשר גם לתת את האופציה להוריד אותו בלחיצה על כפתור כלשהו….

<br />
if (isset($_POST['submit']))<br />
{<br />
global $filename;<br />
  csv($res);<br />
  $out=file_get_contents("{$filename}"); // נוציא את הקובץ למחרוזת<br />
  header("Cache-Control: must-revalidate, post-check=0, pre-check=0");<br />
  header("Content-Length: " . strlen($out));<br />
  // Output to browser with appropriate mime type, you choose ;) <br />
  header("Content-type: text/x-csv; charset=windows-1255");<br />
  //header("Content-type: application/csv");<br />
  header("Content-Disposition: attachment; filename={$filename}");<br />
  echo utf2heb($out); // פה החלק הקריטי, צריך להשתמש ב utf2heb בכדיי להפוך את כל הטקסט ל windows-1255</p>
<p>  exit();<br />
}

יום שישי, אפריל 09th, 2010 | יוצר: admin

בשעה טובה ומוצלחת עברתי את מבחן ההסמכה של Zend PHP 5 ועכשיו ממשיכים הלאה!
PHP Certificate