[PHP Room] แชร์ PHP กันวันละนิด

เริ่มโดย EThaiZone, 05 มีนาคม 2007, 19:27:38

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

Tee++;

วันนี้ว่าง เลยมาอัพเดทให้อีกกระทู้ เรื่องที่ผมจะเขียนส่วนมากเป็น function ใน PHP ที่ไม่ค่อยมีคนใช้กัน หรืออาจลืมไปนะครับ เพราะอันอื่นหาๆ เอาตามเน็ตหรือเปิด manual ก็น่าจะทำกันได้ไม่ยากนะ

eval()

Function นี้ส่วนมากมักจะใช้กันในการเข้ารหัสไฟล์มาตรฐาน base64 ครับ แต่วันนี้เราลองเอามาใช้กับระบบ Template ง่ายๆ กันดีกว่า

สมมุติว่าเรามี Text ไฟล์ อยู่ตัวนึงข้างในนั้นมีเนื้อหารวมทั้งตัวแปร $var แบบนี้ ทีนี้พอเราดึงมาเปิดด้วยคำสั่ง get file ต่างๆ เช่น

$file = @file_get_contents("target.txt");
$var = "Tee";
echo $file;


แบบนี้เราเอามา echo ออกค่าที่ ตัวแปรที่ได้ จะกลายเป็น $var ที่เป็นแค่ srting โดยที่ตัวแปรไม่ได้มีค่าตามที่กำหนด เราสามารถใช้ eval เข้าช่วยได้ครับ


$file = @file_get_contents("target.txt");
$var = "Tee";
eval("\$file = \"$file\";");
echo $file;


ถ้าทำตามข้างบน ค่า $var จะเป็นคำว่า "Tee" ตามปกติ  :o
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


EThaiZone

เทคนิคพิเศษที่ถูกซ่อน ระหว่าง string และ array

string คือ ข้อความที่อยู่ในตัวแปร

ซึ่งสำหรับนัก php มันก็คือตัวแปรทั่วไป
แน่นอนว่า php มีตัวแปร 3 ชนิดหลักๆ
1. ตัวแปรทั่วไป variable ใส่ได้สากกะเบือกยันเรือรบ
2. ตัวแปรหลายมิติ array เป็น variable หลายตัวซ้อนกันโดยเรียกใช้อ้างอิงด้วยคีย์
3. ตัวแปรวัตถุ ใช้เขียนเชิง oop เรียกใช้งานแบบคลาส

แต่แน่นอน ความสามารถของตัวแปรไม่สามารถใช้งานข้ามกันได้ยกเว้นใช้วิธีถ่ายทอดข้อมูล

แต่ความจริงมีวิธีเรียกตัวแปรทั่วไปแบบพิเศษ
หลายคนไม่รู้ว่าความจริงตัวแปรทั่วไป สามารถเรียกในรูป arrayได้ด้วย

$var = "test";

for($i = 0; $i < 4; $i++) {
echo $var[$i]."-";
}


แต่เราไม่สามารถทำแบบนี้ได้

$var = "test";

foreach($var as $cha) {
echo $cha;
}


คือเราสามารถเรียกด้วยคีย์เหมือน array ได้ แต่เราไม่สามารถใช้ฟังค์ชั่นที่รองรับตัวแปรของ array ได้ครับ

ลองเอาเทคนิคนี้ไปใช้ดูนะครับ จะมีประโยชน์เยอะในการจัดการข้อมูล  :D

Tee++;

ขอบคุณครับ พยายามอัพเดทนะครับ ผมตามอ่านอยู่ อิอิ
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


EThaiZone

ส่วนมากผมมักพูดถึงระดับคนเขียน php เป็นแล้วอะครับ

ใครว่างมาเปิดส่วนเบสิคก็ดีครับ ในบอร์ดยังมีคนไม่เป็นอีกเยอะครับ

ปล. พี่ตี๋แวะมาคุยใน msn บ้างก็ได้นะครับ  :D

Tee++;

array_walk( array , callback function [, mixed userdata])

คำสั่งนี้นะครับ หลายๆคนก็ไม่ได้ใช้มันแต่ว่า มันมีประโยชน์และสะดวกมากทีเดียวในการแก้ไขและเปลี่ยนค่า Array  :o

ตัวอย่างเช่น


$array = range(1, 10);
print_r($array);
array_walk($array, "myfunc", " มีค่าเป็นเลข ");
print_r($array);
function myfunc(&$item, $key, $prefix) {
if (($item%2) == 0)
$item = $item.$prefix."คู่";
else
$item = $item.$prefix."คี่ ";
}


โดยที่ output จะออกมาต่างกันดังนี้

ตัวที่ 1

Array
(
   [0] => 1
   [1] => 2
   [2] => 3
   [3] => 4
   [4] => 5
   [5] => 6
   [6] => 7
   [7] => 8
   [8] => 9
   [9] => 10
)


ตัวที่ 2

Array
(
   [0] => 1 มีค่าเป็นเลข คี่
   [1] => 2 มีค่าเป็นเลข คู่
   [2] => 3 มีค่าเป็นเลข คี่
   [3] => 4 มีค่าเป็นเลข คู่
   [4] => 5 มีค่าเป็นเลข คี่
   [5] => 6 มีค่าเป็นเลข คู่
   [6] => 7 มีค่าเป็นเลข คี่
   [7] => 8 มีค่าเป็นเลข คู่
   [8] => 9 มีค่าเป็นเลข คี่
   [9] => 10 มีค่าเป็นเลข คู่
)



เห็นมั้ยครับง่ายๆ และก็สะดวกทีเดียว ไม่ต้องไปวนลูป ให้เสียเวลา  8)
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


ColdMoney

#45
เอามั้งดีก่า เห็นลงกันเยอะเลยอ่ะ

เทคนิคเพิ่มความเร็ว และลดการใช้งาน mysql  
PHP Caching to Speed up Dynamically Generated Sites

ปรกติจะเป็นอย่างนี้


หลังจากใช้เทคนิคสร้าง cache ขึ้นมาก็จะเป็นแบบนี้


จะเห็นว่าจะลดขั้นตอนการอ่าน template fie และการ access mysql ออกไป ซึ่งจะส่งผลดีกับ performance โดยรวมแน่นอนครับ เร็วขึ้น กินทรัพยากรน้อยลง  :lol:

วิธีการสร้าง cache อย่างง่ายนะครับ

<?php 
    ob_start
(); // start the output buffer 
?>


.. Your usual PHP script and HTML here ...

<?php 
     $cachefile 
"cache/home.html"
     
$fp fopen($cachefile'w'); // open the cache file "cache/home.html" for writing 
     
fwrite($fpob_get_contents()); // save the contents of output buffer to the file 
     
fclose($fp); // close the file 
     
ob_end_flush(); // Send the output to the browser 
?>




วิธีใช้งานครับ

<?php 
$cachefile 
"cache/home.html"
if (
file_exists($cachefile)) { 
// the page has been cached from an earlier request 
include($cachefile); // output the contents of the cache file 
exit; // exit the script, so that the rest isnt executed 

?>



มีรายละเอียดอีกเยอะอ่ะครับถ้าสนใจก็ไปอ่านเพิ่มเติมที่เว็บ

อ้างถึงhttp://www.developertutorials.com/tutorials/php/php-caching/page1.html
http://www.theukwebdesigncompany.com/articles/php-caching.php
[direct=https://www.jumnong.com]รับจำนอง[/direct] [direct=https://burapasup.com]รับซื้อบ้าน[/direct] [direct=https://kadsan.com]สินค้าราคาถูก[/direct] [direct=https://checkcheap.com]เปรียบเทียบราคา[/direct]

Tee++;

เยี่ยมไปเลยครับ เทคนิคการสร้าง Cache เหมาะมากๆ กับเวบที่มีคนเข้าจำนวนเยอะๆ ถ้าเพิ่มเวลาหน่วง Cache ลงไปด้วยก็จะสมบูรณ์มากๆ

มีอักตัวแนะนำครับในการทำ cache กับ template ไปด้วยก็ Smarty ไงครับ ครบเครื่องมาก

$smarty->caching = true;
[direct=http://laravel.in.th]Laravel in Thai[/direct]
[direct=http://jquerytips.com]jQueryTips by Tee++;[/direct]
[direct=https://www.facebook.com/jQueryTips]jQueryTips Page[/direct]
[direct=https://www.facebook.com/Laravel.in.th]Laravel in Thai Page[/direct]
[direct=https://twitter.com/Teepluss]Teepluss's Twitter[/direct]


sunkoster

เพิ่งเข้ามาดู กระทู้มีประโยชน์มากคับ
:D
[direct=http://zfind.item69.com/]amazon advance search products[/direct] | [direct=http://zfind.item69.com/]amazon[/direct]

EThaiZone

#48
ต่อเนื่องจากโพสแคชไฟล์ของคุณ ColdMoney

เราจะมาเพิ่มระบบเช็คเวลา
เช่นถ้าแคชเก่าเกิน 30 วินาทีให้ทำแคชใหม่ (สามารถแก้ไขให้นานกว่านี้เป็นวันหรือเดือนได้)

ตัวอย่าง

อ้างถึง<?
    $cachefile = "cache/home.html";
$mtime = time() - @filemtime($cachefile);

if($mtime > 30 || !file_exists($cachefile)) {


ob_start(); // start the output buffer
?>

.. Your usual PHP script and HTML here ...

<?php

     $fp = fopen($cachefile, 'w'); // open the cache file "cache/home.html" for writing
     fwrite($fp, ob_get_contents()); // save the contents of output buffer to the file
     fclose($fp); // close the file
     ob_end_flush();
} else
echo file_get_contents($cachefile);

?>

โดยตรง 30 นั้นคือความต่าง หน่วยเป็นวินาที นั้นหมายถึง
ถ้าแคชเก่ากว่า 30 วินาที จะสร้างแคชใหม่

เราสามารถเพิ่มเป็นวันหรือเดือนได้
อย่างอยากให้มีอายุ 1 ชม. ก็ใช้ 60*60
ถ้าเป็น 1 วันก็ 60*60*24
หรือจะกดในเครื่องคิดเลขแล้วค่อยกรอกก็ได้ครับ 1 ชม. = 3600 วินาที  :D

winzaan

ขอถามหน่อยครับว่าระหว่าง

<br>

กับ

<br /> บางทีก็ <br/>

ต่างกันยังไงครับ

ตัวนี้ >> / คืออะไรครับ

เทมาเส็ก

อ้างถึงจาก: winzaanขอถามหน่อยครับว่าระหว่าง

<br>

กับ

<br /> บางทีก็ <br/>

ต่างกันยังไงครับ

ตัวนี้ >> / คืออะไรครับ

เป็นมาตรฐาน HTML ครับ

<br> ใช้กับ HTML 4.0 ลงไป
<br /> ใช้กับ XHTML 1.0 ขึ้นไป

amaudy


EThaiZone

เราจะมาพูดถึงการเก็บแคชต่ออีกหน่อยนะครับ

แคชที่ผมอยากแนะนำให้เก็บจะอยู่ในรูปตัวแปร ถึงจะดี

ฟังค์ชั่นที่อำนวยความสะดวกตรงนี้คือ
serialize และ unserialize

สามารถนำเอาค่าในตัวแปรมาจัดการเข้ารหัสแล้วเราสมารถบันทึกเป็นไฟล์
แล้วค่อยมาใช้ unserialize ในการแปลงกลับได้ครับ

ว่างๆ ลองใช้ดูครับ serialize และ unserialize

แต่ก็มีแคชบางชนิดที่เก็บด้วยวิธีปกติก็มีนะครับ
ใช้ให้เหมาะแล้วระบบของเว็บเราจะเบาครับ

EThaiZone

อีกโพสละกัน จะพูดถึงการเรียกพาท กัน

หลายคนมักทีปัญหาเรื่องการเรียกพาทภายใน
ดังนั้นมีชุดคำสั่งที่อยากแนะนำให้ลองใช้ครับ

$path = dirname(__FILE__)."/";

จะทำให้ได้ค่าพาทภายในที่ถูกต้อง

โดยใช้ __FILE__ ในการเรียกตัวไฟล์โดยตรง

หลายคนคงสงสัยนิดๆ ว่าแล้ว $PHP_SELF ละ มันใช้ไม่ได้เหรอ

$PHP_SELF จะคืนค่าในรูป โฟลเดอร์จากรูทเว็บ/ชื่อไฟล์ที่ execute ในขณะนั้น
ต่างจาก __FILE__ จะคืนค่าเป็น
พาทภายในจนถึงไฟล์ที่มีคำสั่งนั้นอยู่

ผมพูดหมายถึงไฟล์ที่มีคำสั่งนั้นอยู่นะครับ ไม่ใช่ไฟล์ที่ ทำงาน (execute) อยู่
ดังนั้น __FILE__ จึงเหมาะในการเรียกพาทภายในมาก
เพราะแม้ไฟล์นั้นจะโดน include ดึงไป พาทมันที่คืนค่าจะถูกต้องเสมอ

ดังนั้นจึงใช้ __FILE__ แล้วถึงค่อยใช้ dirname เรียกเฉพาะพาทไม่ร่วมไฟล์

แนะนำให้เอาคำสั่งนี้ใส่ไว้ในไฟล์ที่อยู่ตายตัวอย่าง config

หวังว่าคำสั่งชุดนี้จะช่วยได้นะครับ  :D

sealinda

[direct=http://www.thaiseoboard.com/index.php/topic,95911.msg1197898.html#msg1197898]รับบริจาคของขวัญ สำหรับงานวันเด็ก (ส.ที่ 9 ม.ค. 53 ที่บ้านราชวิถี)[/direct] |[direct=http://www.sealinda.com/]ขายส่งเีครื่องสำอางแบรนด์เนม[/direct] | [direct=http://www.girliza.com/]เทคนิคการแต่งหน้า&บำรุงผิว[/direct]|[direct=http://bookmark.girliza.com]บุ๊คมาร์คแซ่บๆ[/direct]

EThaiZone

นึกไม่ออกว่าจะโพสไรดี เอาคำสั่งชุดนี้ละกันครับ

เคยมีหลายครั้งไหมที่อยากจัดการบทความที่มีทั้ง
ขึ้นบรรทัดใหม่บ้าง จัดคำไม่เป็นส่วนบ้าง เดี๋ยววรรคยาวๆ สั้นๆ

$pat[0] = "/^\s+/";
$pat[1] = "/\s{2,}/";
$pat[2] = "/\s+\$/";
$rep[0] = "";
$rep[1] = " ";
$rep[2] = "";
$str = '  Words with  lots      of  spaces    
very         problems';
$str = preg_replace($pat,$rep,$str);
// แสดงผล
"Words with lots of spaces very problems"


หวังว่าจะช่วยได้นะครับ  :D


ส่วนมากผมมักพูดถึงระดับสำหรับคนเขียน php เป็นกันแล้วซะมากกว่า
ดังนั้นท่านได้สงสัยไม่เข้าใจตรงไหนก็ถามได้นะครับ แต่อย่างว่าๆ ถ้าอยากเริ่มตั้งแต่ยืนพื้น
ควรหาหนังสือมาอ่านและลองปฎิบัติจรืงควบคู่กันไปจะดีที่สุดครับ

pete

อยากได้ script ลอกของชาวบ้านมาขายใน CB อ่ะคับ

พอจะมีมั๊ย
ตอนนี้กะลัง in trend เชียว ก๊ากๆๆ

EThaiZone

ผมรู้แต่มีโครงการเขียนสคริปขยะเอาไปหลอกขายใน CB ก๊ากๆๆ

ถึงบอกว่าขยะ แต่คุ้มราคาแน่นอน  :lol:
แต่ไม่กล้าขายให้คนไทยเสียว เดี๋ยวรู้ไต๋กันหมด  :twisted:

















อะ ย้อเย่น  :lol:

sealinda

อ้างถึงจาก: peteอยากได้ script ลอกของชาวบ้านมาขายใน CB อ่ะคับ

พอจะมีมั๊ย
ตอนนี้กะลัง in trend เชียว ก๊ากๆๆ

ไม่เห็นต้องถามหาสคริปเล้ยยยย

ก้อแค่ ก๊อปอันที่เค้าก๊อปมาขาย เอาไปขายต่อนั่นแหละ ง่ายดี  :twisted:  คลาสนี้ก้อไม่ต้องเรียนแล้ว  :twisted:  :twisted:  :twisted:
[direct=http://www.thaiseoboard.com/index.php/topic,95911.msg1197898.html#msg1197898]รับบริจาคของขวัญ สำหรับงานวันเด็ก (ส.ที่ 9 ม.ค. 53 ที่บ้านราชวิถี)[/direct] |[direct=http://www.sealinda.com/]ขายส่งเีครื่องสำอางแบรนด์เนม[/direct] | [direct=http://www.girliza.com/]เทคนิคการแต่งหน้า&บำรุงผิว[/direct]|[direct=http://bookmark.girliza.com]บุ๊คมาร์คแซ่บๆ[/direct]

EThaiZone

เดี๋ยวก่อนกระทู้จะโดนเบี่ยงเบนไปซะก่อน

วันนี้อารมณ์ดีมากๆ (โปรเจ็คเดินหน้าด้วยดี แถมเพิ่งทำ engine ตัวใหม่เสร็จ)

เข้าเรื่อง จำสคริป Related จาก Google ได้ไหมครับ
ที่ผมจำกัดแจกแค่ราวๆ 30 คนอะ

ตอนนี้คิดอีกทีเอามาแจกเลยไว้ถาวรดีกว่า เพราะเท่าที่สำรวจ คนใช้มากกกว่า 60 คนแล้วมั้ง  :lol:

function ggkeyword($keyword) {
   $gg_result = file_get_contents("http://www.google.com/complete/search?hl=en&js=true&qu=".$keyword);
   $gg_reg = '/sendRPCDone\(frameElement, "(.*)", new Array\("(.*)"\), new Array\("(.*) results"\), new Array\(""\)\);/';

   preg_match($gg_reg, $gg_result, $keylist);

   $keyname = split('", "', $keylist[2]);
   $keyhits = split(' result(s*)", "', $keylist[3]);

   $keyhits = str_replace(",", "", $keyhits);

   return array($keyname, $keyhits);
}


วิธีใช้

$key = ggkeyword("test");

for($i=0;$i<10;$i++) {
   echo $key[0][$i]."=".$key[1][$i]."<br>";
}


หวังว่าจะได้ใช้ประโยชน์นะครับ  :D