วันเสาร์ที่ 17 ตุลาคม พ.ศ. 2558

Tip4 : Yii and Php จากประสบการณ์

**************PHP***************
1.ทำให้อัพโหลดไฟล์ได้มากกว่า 5mb
http://www.sutenm.com/%E0%B9%81%E0%B8%81%E0%B9%89%E0%B9%84%E0%B8%82%E0%B9%83%E0%B8%AB%E0%B9%89-wordpress-upload-file/

2.ส่ง post data ไปหน้า page ที่ต้องการ พร้อมรับผลลัพท์ด้วย file_get_content
http://stackoverflow.com/questions/2445276/how-to-post-data-in-php-using-file-get-contents

3.ระบบแจ้งเตือน
http://www.thaicreate.com/community/php-mysql-alert-notify-new-message-notification.html

4.add element to array list
$list = array();
array_push($list, $objWillAdd);

5.การ lmport excel ไฟล์ csv เข้า php
< form enctype="multipart/form-data" method="POST" >
    < input name="userfile" type="file" >
    < input type="submit" value="Upload" >
  < /form >



 สำหรับตัวรับไฟล์ก็จะเป็น ภาษา php ดังนี้

if ( isset( $_FILES['userfile'] ) )
{
  $csv_file = $_FILES['userfile']['tmp_name'];

  if ( ! is_file( $csv_file ) )
    exit('File not found.');

  if (($handle = fopen( $csv_file, "r")) !== FALSE)
  {
      while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
      {
            echo $data[0];
            echo $data[1];
            echo $data[2];
      }
      fclose($handle);
  }
  exit( "Complete!" );
}

6.แก้ปัญหาเปิดไฟล์ภาษาไทยแล้วเพี้ยน ครอบด้วย iconv() ด้วยการแปลงจาก TIS-620 เป็น UTF-8 ได้ดังนี้
fopen( iconv('TIS-620',"UTF-8",$file_or_string), "r"))

7.หา sting "are" ใน string $a
strpos($a,'are') !== false //ถ้าเจอคืน true
substr_count($a, 'are') > 0 //ถ้าเจอคืนตำแหน่ง



8.microtime(true) is current time in micro second.

9.class ใดๆก็ตามที่มีการสร้าง Object ด้วยการ .getInstance()
จะเรียก class เหล่านั้นว่ามีการเขียนแบบ Singleton 
ซึ่งการเขียนลักษณะนี้จะเป็นการสร้าง instance ของ object นั้นขึ้นมาเพียงครั้งเดียวตอนเริ่มโปรแกรม
และให้ class อื่นๆที่ต้องการเรียกใช้ instance ของมันเองเรียกผ่านทาง .getInstance() ครับ

เหตุผลที่ต้องมี singleton เพราะในบางสถานการณ์ การสร้าง object เพียง
ตัวเดียวแล้วให้โปรแกรมทั้งหมดมาใช้ Object ตัวนั้นเพียงตัวเดียวจะมีประโยชน์มากกว่าครับ
เช่น การสร้าง Object ของการเชื่อมต่อฐานข้อมูลที่ต้องใช้พลังงานมากในตอนสร้าง
พอสร้างเสร็จแล้วก็ทำเป็น singleton ไว้ให้ Class อื่นๆ มาเรียกใช้ได้อีกเรื่อยๆครับ

แต่ singleton ก็มีข้อเสียที่เห็นได้ชัดคือ object life time ครับ เพราะ
Object ที่ถูกสร้างขึ้นโดยวิธีนี้จะไม่ถูกทำลายจนกว่าโปรแกรมจะหยุดทำงาน
(ข้อ9อันนี้ไม่ได้เขียนเองครับ นำมาจาก http://www.narisa.com/forums/index.php?showtopic=34733 )

10.public function __construct(...) เป็น constructure ของ class ใน php

11.Redis คือ key-value database เหมือนกับ Memcache แต่ต่างกันตรงที่ Redis
นั้นจะทำการบันทึกข้อมูลต่างๆ ลง storage ส่วน memcache จะอยู่ใน ram

12.How to use regular expression for
preg_match('/^(?=.*([0-9]))(?=.*([A-z]))[A-z0-9]{6,12}$/' , $password)

13.เราสามารถเรียกใช้ function ใน class ที่เรา extend เข้ามาได้
โดยการเรียกใช้นั้นเสมือนเราเรียกใช้ function ในคลาสที่เรียก นั้นคือ
function ใน class ที่ extend มานั้น สามารถเรียกใช้ function ใน class ของเราที่เป็นคนเรียกใช้ได้
เช่น SerialCodeAbstract ที่ extends TableMapper
ใน SerialCodeAbstract เรียกใช้ static::find() ซึ่งเป็น function ใน TableMapper
จะเสมือนนำ function find() นั้นมารันที่ SerialCodeAbstract นั้นเอง ซึ่งทั้ง 2 คลาสนี้เวลา
เรียกใช้ fuction นั้น จะทำการค้นหา function ในคลาสของผู้ที่เรียก extends ก่อน ในที่นี้คือ
SerialCodeAbstract นั้นเอง ซึ่งหากไม่มีก็จะไปทำใน fuction ของ TableMapper แทน
(ในตัวอย่าง static:find() นั้นไม่มีใน SerialCodeAbstract แต่มีใน TableMapper
แต่ถ้ามีทั้งคู่ มันจะใช้ในคลาสผู้ที่ extend คือ SerialCodeAbstract นั้นเอง)


*************YII*****************
1.นับจำนวน tuple ที่ค้นได้ใน db
    $count = Notification::model()->countByAttributes(array(
            'user_id'=> Yii::app()->user->uid
        ));

2.การเพิ่ม FK ใน model
    public function relations()
    {
        return array(       
            'memberIdMember' => array(self::BELONGS_TO, 'Member', 'member_id_member'),
            // 'ชื่อที่ใช้เรียกFK' => array(self::BELONGS_TO, 'Modelของปลายทาง', 'ค่าAtrributeที่ชี้ไปFK'),
        );
    }
    ตัวอย่างเรียกใช้โดย เช่น $advisor->memberIdMember->username

3.get ค่าเป็น array ตามเงื่อนไข
Advisor::model()->findAllByAttributes(array('curriculum_id_curriculum'=>$value));


*************OTHER*************
ปลดล็อค gmail ให้ส่งเมลล์ผ่าน smtp ได้    https://support.google.com/mail/answer/14257

ไม่มีความคิดเห็น:

แสดงความคิดเห็น