發表文章

目前顯示的是 2月, 2016的文章

PHP教學 - 利用 php 來定期執行想要跑的程式

我們都知道利用 linux 可以跑 crontab 利用windows 可以跑排程,有沒有甚麼 php 函式,是可以拿來執行排程的,答案是有的我們可以利用 ignore_user_abort(),set_time_limit(0),sleep($interval) 範例如下: <?php ignore_user_abort();//關掉瀏覽器,PHPscripts也可以繼續執行. set_time_limit(0);// 通過set_time_limit(0)可以讓程式無限制的執行下去 $interval=60*30;// 每隔半小時執行 do{     echo "<script type='text/javascript'>";     echo "alert('這是我的php');";     echo "</script>";  //這裡是你要執行的程式碼  sleep($interval);// 等待5分鐘 }while(true); ?> 不過我這程式寫的是來亂的,因為他會不斷的去alert,或許我們可以應用在自行開發的系統中,規劃個表單讓使用者可以自行選擇要執行排程的時間,省去使用者還要利用 crontab 進行設定的困擾。

PHP教學 - 簡單的圖片增加浮水印

圖片
先前曾經分享過圖片上傳增加浮水印,現在再來分享另一個浮水印的程式如下: <?php  $ori_img = "images/3.jpg"; //原圖  $water_img = "logo.png"; //水印  $new_img = "images/daixiaorui.jpg"; //產生水印後的圖片  $original = getimagesize($ori_img); //得到圖片的訊息,可以print_r($original)發現它就是一個陣列  $watermark = getimagesize($water_img);  $s_original = imgCreateFrom($ori_img, $original[2]); //$original[2]是圖片類型,其中1表示gif、2表示jpg、3表示png  $s_watermark = imgCreateFrom($water_img, $watermark[2]);  $posX = $original[0] - $watermark[0]-10; //X坐標(右下角)  $poxY = $original[1] - $watermark[1]-6; //Y坐標(右下角)  //打水印  imagecopy($s_original, $s_watermark, $posX, $poxY, 0, 0, $watermark[0], $watermark[1]);  header("Content-type:image/jpg");  //選擇圖片來源(若不想顯示在網頁上可以註解掉)  imagejpeg($s_original);   //向瀏覽器輸出圖片(若不想顯示在網頁上可以註解掉)  $loop = imagejpeg($s_original, $new_img); //產生新的圖片(jpg格式),如果用imagepng可以產生png格式  if($loop){   echo "水印增加成功!";  }  //根據文件類型 新增一個新圖像  function imgCreateFrom($img_src, $val){   switch($val){    case 1 : $im

PHP教學 - 來個淺顯易懂的站內搜尋

圖片
本文範例介紹 php 站內搜尋關鍵字變亮的方式,分享給大家供大家參考。如下: 我們這個做法是把搜尋結果出來,與搜索關鍵字相同的替換成高亮的字, 我們會用到str_replace(你找的關鍵字,<帶有高亮的html標籤>你找的關鍵字,$str); 就這麼容易了,好了下面我們來看一個範例吧. 先新增一個資料庫:create database 'fangke_cc'; 再新增表,SQL建庫程式碼如下: 程式碼如下: CREATE TABLE `fangke_cc`.`search` ( `id` INT( 255 ) NOT NULL AUTO_INCREMENT , `keyword` VARCHAR( 60 ) NOT NULL , PRIMARY KEY ( `id` ) ) ENGINE = MYISAM 我們導入一些資料,SQL建庫程式碼如下: 程式碼如下: INSERT INTO `search` (`id`, `keyword`) VALUES (1, 'PHP二次開發:www.php2.cc'), (2, 'ASP一次開發:www.asp.cc'), (3, 'JSP二次開發:www.jsp.cc'), (4, 'ASP.NET三次開發'); 好了下面我們就來執行查詢操作,範例程式碼如下: <?php header("Content-Type:text/html; charset=utf-8"); if( $_POST) { $db ='fangke_cc'; mysql_pconnect('localhost','root','密碼') or die(mysql_error()); mysql_select_db($db); mysql_query("SET NAMES UTF8"); $key = $_POST['keyword']; $sql = "Select * from search where keyword like '%$key%'&qu

MySQL 更新資料相關語法整理

這次在開發系統的過程中,遇到需要更新語法的SQL,順便做個筆記,避免忘記 如果不存在才 INSERT,存在就 skip 舉例來說,如果想記錄某 user 是否去過某國家 -----------------  user  | country -------+---------  tony  | US  tony  | HK  kelly | US Query:     INSERT INTO `trip` (`user`, `country`) SELECT 'tony', 'US' FROM DUAL WHERE NOT EXISTS (   SELECT 1 FROM `trip` WHERE `user` = "tony" AND `country` = "US" LIMIT 1 ); * 想 INSERT 的 table 可以跟檢查存在性的 table 不同個。 如果不存在才 UPDATE,否則 skip 舉例來說,你想讓 user 更新 email 欄位(unique),但 email 又不能跟其他人一樣: ------------------------------  user      | email -----------+------------------  olivia    | olivia@email.com  andy_wang | andy@email.com  andy_lin  | (NULL) Query:     UPDATE `profile` SET `email` = "andy@email.com" WHERE `user` = "andy_lin" AND NOT EXISTS (SELECT 1 FROM `profile` WHERE `email` = "andy@email.com"); 但你會發現 mysql execute query 會有下面錯誤:     You can't specify target table 'profile' for update in FROM claus

PHP教學 - 利用 php 將文字轉成圖片

有需要的可以參考,simsun.ttc 就自己上網找了  <?php $im = imagecreatetruecolor(400, 30);            //新增400 30像素大小的畫布 $white = imagecolorallocate($im, 255, 255, 255); $grey = imagecolorallocate($im, 128, 128, 128); $black = imagecolorallocate($im, 0, 0, 0); imagefilledrectangle($im, 0, 0, 399, 29, $white);       //輸出一個使用白色填充的矩形作為背景 //如果有中文輸出,需要將其轉碼,轉換為UTF-8的字串才可以直接傳遞 //$text = iconv("GB2312", "UTF-8", "回憶經典");  $text = "狀態"; //設定字體,將系統中與simsun.ttc對應的字體複製到當前目錄下 $font = 'simsun.ttc'; imagettftext($im, 20, 0, 12, 21, $grey, $font, $text);      //輸出一個灰色的字串作為陰影 imagettftext($im, 20, 0, 10, 20, $black, $font, $text);         //在陰影上輸出一個黑色的字串 header("Content-type: image/png"); imagepng($im); imagedestroy($im); exit; ?>

Raspbian忘記密碼了該怎麼辦?

Raspberry Pi:Raspbian忘記密碼了 安裝Raspbian、開機、初始設定之後,應該都會修改預設帳號pi的密碼(原本是raspberry),但如果忘記了,怎麼辦呢? 拔出記憶卡,放到其他台電腦裡,修改第一個分割區裡的cmdline.txt,裡頭只有一行,原本內容大概如下: dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait 在最後面加上「init=/bin/sh」。 然後放回Raspberry Pi開機,應該很快就會出現「#」提示字元,然後輸入底下的指令: # su  (變成超級使用者) # passwd pi  (重新設定帳號pi的密碼) # sync  (清空緩衝區,確保設定儲存生效) # exec /sbin/init  (執行一般開機後會執行的程序) 然後會看到平常的開機訊息,看到login:後,登入帳號pi,再去修改/boot/cmdline.txt,拿掉之前加入的「init=/bin/sh」。 然後重開機,完工。

PHP教學 - 取得即時匯率 (非 curl)

圖片
從網路上看到的抓取匯率程式非常經典值得分享,不過我修改了一下增加 utf8 <?php header("Content-Type:text/html; charset=utf-8"); $from = 'USD';  // 美元 $to = 'TWD'; // 新台幣 //重點只有這行 知道匯率擷取的位址 $uri = 'http://finance.yahoo.com/d/quotes.csv?e=.csv&f=sl1d1t1&s='. $from . $to .'=X'; $content = file_get_contents($uri); $content = explode(',', $content); echo "$from => $to 匯率: ".$content[1]; echo "<br>"; echo "匯率擷取時間: ".$content[2].$content[3]; $rate = $content[1]; ?>

javascript-jQuery - IFRAME 呼叫父視窗內的函數 - iframe

圖片
假如利用 js 能否呼叫 iframe 中的函數呢? jQuery 提供相關的呼叫父親視窗內的函數功能 test.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>jQuery - IFRAME 呼叫父視窗內的函數 - parent</title> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> </head> <script type="text/javascript"> $(document).ready(function () {   callMe = function(str) {     $('div').text(str);   } }); </script> <body> <div>我是DIV</div> <iframe src="167.html" width="300px" height="120px" border="0" frameborder="0"></iframe> </body> </html> 167.html  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.

PHP教學 - 利用 jsonp 進行跨網域 ajax 二

圖片
JSONP 是利用在頁面生成 <script src="跨網域.js"></script> 的方式來取得跨網域的資料, 這可以解決 AJAX 不能直接跨網域的問題。 (註:除了 JSONP,也可用 AJAX + 另外一支讀取跨網域資料的伺服器端程式,亦能讀取跨網域資料) 而 jQuery 也將 JSONP 的方法,加到 AJAX 的 API 中,所以使用方式跟 AJAX 差不多。 以下範例是 http://192.168.0.101/jsonp/index2.html 取得跨網域 http://192.168.0.100/jsonp/jsonp2.php 的資料。 http://192.168.0.101/jsonp/index2.html 內容如下         <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript"> $(function(){     $.ajax({          type: "get",          async: false,          url: "http://192.168.100/jsonp/jsonp2.php",

PHP教學 - 利用 jsonp 進行跨網域 ajax

圖片
上一篇我們提到使用javascript、jquery 或 jquery mobile可以進行客戶端向伺服器端做資料交換,js 就能將資料丟給 php ,但如果要跨網域呢?下列範例就說明如何進行跨網域。 客戶端 server ip 192.168.0.101 <!DOCTYPE html> <html> <head>     <title>JSONP 範例</title>     <meta charset="utf-8">     <script src="http://apps.bdimg.com/libs/jquery/1.8.3/jquery.js"></script>    </head> <body> <div id="divCustomers"></div> <script> $.getJSON("http://192.168.0.100/jsonp/jsonp.php?jsoncallback=?", function(data) {         var html = '<ul>';     for(var i = 0; i < data.length; i++)     {         html += '<li>' + data[i] + '</li>';     }     html += '</ul>';         $('#divCustomers').html(html); }); </script> </body> </html> 伺服器端 server ip 192.168.0.100 <?php header('Content-type: application/json'); //獲取回調函數名 $jsoncallback = htmlspecialchars($_REQUEST ['

PHP教學 - 使用 jquery mobile 時 ajax 技巧

圖片
通常原生的 javascript 或 jquery 可以利用 ajax 來和伺服器端的程式進行資料交換,但若是想使用 jquery mobile 時能否利用 ajax 來進行資料交換呢?我們提供下列範例來說明如何使用 jquery mobile ajax 和 php 做資料交換。 index.html <!DOCTYPE html>  <html>      <head>      <title>Submit a form via AJAX</title>        <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a4/jquery.mobile-1.0a4.min.css" />        <script src="http://code.jquery.com/jquery-1.5.2.min.js"></script>        <script src="http://code.jquery.com/mobile/1.0a4/jquery.mobile-1.0a4.min.js"></script>  </head>  <body>      <script>          function onSuccess(data, status)          {              data = $.trim(data);              $("#notification").text(data);          }              function onError(data, status)          {              // handle an error          }                      $(document).ready(function() {              $("#submit").click(fu

PHP教學 - 利用 curl 抓取網頁資料再存到mysql裡

圖片
當我們學會如何抓取網頁的html div 值之後,我就在思考如何將資料存到 mysql 呢?雖然目前用不到,但或許哪天會需要,那麼到底能不能辦到?相信自己,相信 php 沒有辦不到的,我們利用上次抓取台銀美金匯率那個範例來操作一次如下 <html> <head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>抓取美金匯率</title> <meta http-equiv="refresh" content="300"/> </head> <body> <div style="margin-left:30px"> <?php $url = "http://rate.bot.com.tw/Pages/Static/UIP003.zh-TW.htm"; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); $content = curl_exec($ch); curl_close($ch); preg_match_all('/<td class="decimal">([^<>]+)<\/td>/',$content,$target); echo "<p>美金部分"."<br>";?> <table width="100%" border="1"> <tr>    <td><?php echo "即期匯率買入";?></td>    <td><?php echo "即期匯率賣出";?></td&g

PHP教學 - 利用 curl 抓取網頁圖片

1. 取得指定網頁內的所有圖片:     //取得指定位址的內容,並儲存至text      $text=file_get_contents('http://andy.diimii.com/');             //取得所有img標籤,並儲存至二維陣列match      preg_match_all('# ]*>#i', $text, $match);            //印出match      print_r($match);      ?> 2. 取得指定網頁內的第一張圖片:     //取得指定位址的內容,並儲存至text      $text=file_get_contents('http://andy.diimii.com/');            //取得第一個img標籤,並儲存至陣列match(regex語法與上述同義)      preg_match('/ ]*>/Ui', $text, $match);            //印出match      print_r($match);      ?> 3. 取得指定網頁內的特定div區塊(藉由id判斷):     //取得指定位址的內容,並儲存至text      $text=file_get_contents('http://andy.diimii.com/2009/01/seo%e5%8c%96%e7%9a%84%e9%97%9c%e9%8d%b5%e5%ad%97%e5%bb%a3%e5%91%8a%e9%80%a3%e7%b5%90/');             //去除換行及空白字元(序列化內容才需使用)      //$text=str_replace(array("\r","\n","\t","\s"), '', $text);               //取出div標籤且id為PostContent的內容,並儲存至陣列match      preg_match('/ ]*id="PostContent"[^>]*>

PHP教學 - 利用 curl 來抓取網頁 div 資料

圖片
突然想要來玩玩 curl 抓取網頁 div 資料,php 可以利用 curl 函式來執行,我們可以用來抓取別人網站的各種資料,本範例想抓取台銀的資料 <html> <head><meta http-equiv="Content-Type" content="text/html;charset=utf-8"> <title>抓取美金匯率</title> <meta http-equiv="refresh" content="300"/> </head> <body> <div style="margin-left:30px"> <?php $url = "http://rate.bot.com.tw/Pages/Static/UIP003.zh-TW.htm"; $ch = curl_init(); curl_setopt($ch,CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); $content = curl_exec($ch); curl_close($ch); preg_match_all('/<td class="decimal">([^<>]+)<\/td>/',$content,$target); echo "<p>美金部分"."<br>";?> <table width="100%" border="1"> <tr>    <td><?php echo "即期匯率買入";?></td>    <td><?php echo "即期匯率賣出";?></td> </tr> <tr> <?php echo $ta

MySQL mysql blob大小配置介紹

圖片
什麼是blob,mysql blob大小配置介紹 mysql BLOB是一個大文件,典型的BLOB是一張圖片或一個聲音文件,由於它們的尺寸,必須使用特殊的方式來處理(例如:上傳、下載或者存放到一個資料庫)。 根據Eric Raymond的說法,處理BLOB的主要思想就是讓文件處理器(如資料庫管理器)不去理會文件是什麼,而是關心如何去處理它。但也有專家強調,這種處理 大數據對象的方法是把雙刃劍,它有可能引發一些問題,如存儲的二進制文件過大,會使資料庫的性能下降。在資料庫中存放體積較大的多媒體對象就是應用程序處 理BLOB的典型例子。 mysql BLOB類型 MySQL中,BLOB是個類型系列,包括:TinyBlob、Blob、MediumBlob、LongBlob,這幾個類型之間的唯一區別是在存儲文件的最大大小上不同。   MySQL的四種BLOB類型   類型 大小(單位:位元組)   TinyBlob 最大 255   Blob 最大 65K   MediumBlob 最大 16M   LongBlob 最大 4G linux修改etc/my.cnf [mysqld] max_allowed_packet = 16M //不同於[mysqldump]下的max_allowed_packet

PHP教學 - 使用BLOB存取圖片資料範例

圖片
BLOB是一種MySQL資料類型,稱為二進制大物件。正如它的名字它是用來存儲類似MYSQL二進制和VARBINARY類型的、大量的字串資料。 MySQL BLOB分類 MySQL BLOB類型 最大存儲長度(字元) TINYBLOB (1)(2 ^ 8) blob ((2 ^ 16)1) MEDIUMBLOB ((2 ^ 24)1) LONGBLOB ((2 ^ 32)1) 在本節教學中,我們學習使用PHP插入和讀取MySQL BLOB字段。 首先,我們需要新增一個MySQL表與一個BLOB字段。     CREATE TABLE IF NOT EXISTS `output_images` (   `imageId` tinyint(3) NOT NULL AUTO_INCREMENT,   `imageType` varchar(25) NOT NULL DEFAULT '',   `imageData` mediumblob NOT NULL,   PRIMARY KEY (`imageId`) ) 插入資料 將圖片訊息插入MySQL BLOB字段中。 1、上傳圖像文件. 2、獲取圖像屬性(圖像資料、圖像類型等等。) 3、圖像文件插入BLOB。 PHP實現scripts: imageUpload.php     <?php if(count($_FILES) > 0) { if(is_uploaded_file($_FILES['userImage']['tmp_name'])) { mysql_connect("localhost", "root", ""); mysql_select_db ("phppot_examples"); $imgData =addslashes(file_get_contents($_FILES['userImage']['tmp_name'])); $imageProperties = getimageSize($_FILES['userImage']['tmp_name']); $sql = "

PHP教學 - xampp 發生 Access to the requested object is only available from the local network.

New XAMPP security concept: Access to the requested object is only available from the local network. This setting can be configured in the file "httpd-xampp.conf". 解決方式: <LocationMatch "^/(?i:(?:xampp|security|licenses|phpmyadmin|webalizer|server-status|server-info))">         Order deny,allow         Allow from all         #Allow from ::1 127.0.0.0/8 \              #      fc00::/7 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 \                #    fe80::/10 169.254.0.0/16         ErrorDocument 403 /error/HTTP_XAMPP_FORBIDDEN.html.var </LocationMatch>

Raspberry Pi 安裝 phpmyadmin

圖片
安裝方式很簡單 假設裝好 php、mysql、apache 之後, 僅需要下 apt-get install phpmyadmin 指令, 安裝過程會詢問 Raspberry Pi root 帳號密碼,然後會詢問輸入 mysql root 密碼(兩次) 經過漫長等待就裝完了, 但依據玩 ubuntu、centos 的經驗,會直接開瀏覽器然後輸入 Raspberry Pi ip + phpmyadmin 最後會發現到甚麼都沒有 404, 經過 google 一番後得知, 需要修改 apache 設定, cd /etc/apache2 vi apache2.conf ##我的習慣是加在設定檔文件的最後一行## Include /etc/phpmyadmin/apache.conf service apache2 restart ok,完成!

Raspberry Pi 安裝Apache、MySQL、PHP

Raspberry Pi:安裝Apache、MySQL、PHP 我的Raspberry Pi記憶體有512 MB,其中把64 MB分給GPU;超頻到900 MHz,詳細超頻設定如下: arm_freq=900 core_freq=250 sdram_freq=450 over_voltage=2 因為網站伺服器需要很多資源,如果你的Raspberry Pi記憶體只有256 MB,最好只分32 MB給GPU。 我安裝的Linux發行套件是Raspbian 。 接下來要安裝許多套件,最好先更新套件資訊,甚至先更新套件。 $ sudo apt-get update; sudo apt-get dist-upgrade -y 然後以底下指令安裝主角們,大約需要116 MB的空間。 $ sudo apt-get install apache2 php5 php5-mysql mysql-server 安裝過程中,會詢問你「New password for the MySQL "root" user:」,也就是MySQL資料庫帳號root的密碼,請設定。 然後請耐心等待,直到安裝完成後,Apache與MySQL伺服器(server,在Linux裡又稱為daemon)便已經在背景執行,先以指令ifconfig查出rpi的IP位址,然後從別台電腦開啟瀏覽器、輸入IP位址,可看到如下畫面。這也是/var/www/index.html的網頁內容。 接下來需確認Apache能夠成功載入PHP模組,才能執行PHP程式碼產生動態網頁。在/var/www裡新增檔案phpinfo.php,內容如下: <?php phpinfo(); ?> 然後在網址列裡輸入IP位址與檔名phpinfo.php,應可出現如下畫面。 測試PHP完畢後,可刪除phpinfo.php。 如果你直接在Raspberry Pi上進入圖形介面並開啟瀏覽器,可把IP位址換成localhost,譬如http://localhost/phpinfo.php,也應該一樣。 位於 03:00 

Raspberry PI 網路設定

雖然 Raspberry PI Model B 已內建一個 ethernet 可供有線網路的連接,如果不想拉條長尾巴在小巧的 Raspberry PI 上,我們可以使用 USB 的無線網卡來進行網路連線。至於哪一種比較好用,可能要上網研究一下,最基本的條件當然是得要省電囉!我手上剛好有一個 D-Link DWA-110 (Ver. A1),試過了,它雖然體積大了一點,可以直接插在 Raspberry PI Model B 的 USB 上使用。 關於有哪些 USB 無線網卡有支援的,可以參考下列的網址:     http://elinux.org/RPi_VerifiedPeripherals#USB_Wi-Fi_Adapters 我 SD 卡中安裝的系統版本如下:     Linux raspberrypi 3.6.11+ #371 PREEMPT Thu Feb 7 16:31:35 GMT 2013 armv6l GNU/Linux 當 D-Link DWa-110 插入 USB 後,利用 sudo lsusb 指令可以查到類似以下的訊息:     Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.     Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub     Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.     Bus 001 Device 006: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port     Bus 001 Device 005: ID 07d1:3c07 D-Link System DWA-110 Wireless G Adapter(rev.A1) [Ralink RT2571W] 由最後一個裝置的訊息看來,DWA-110 已經直接抓到,不用再特別安裝驅動程式了。 這樣,我們只要修改兩個和無線網路相關的設定檔後,即可進行無線網路的連線了。 修改 /etc/network/interfaces 無論有線或