星期二, 10月 18, 2016

[Node.js] node 指令錯誤

今天在試著建構Vue+Lavavel開發環境,
發現node -v的cli的指令會噴以下錯誤

The program 'node' can be found in the following packages:
 * node
 * nodejs-legacy
Try: sudo apt-get install <selected package>

可以透過以下的指令來解決

sudo ln -s `which nodejs` /usr/local/bin/node

[Wordpress] 如何傳遞變數至樣版

待處理..


參考


http://mekshq.com/passing-variables-via-get_template_part-wordpress/

星期一, 10月 17, 2016

[CSS] css 特效hover on 和 off



最近處理一個畫框的特效,效果要在hover的時候順時鐘畫,
原來只有注意hover 的時候加入線的寬,但沒考慮hover off的行為(讓框倒帶)
不過在這篇讓我想到哪裡要修正

https://css-tricks.com/different-transitions-for-hover-on-hover-off/

終於可以順利倒帶 -,-

作品是朋友的網站大境建設 : thegand.com.tw

星期五, 10月 07, 2016

[Vue.js] Laravel + Vue.js 2.0安裝踩雷之旅


記錄一下整個Lavarel+Vue.js 2.0 踩地雷的過程。
主要參考此篇大大的教學,但沒有用fork的方法Q_Q。




Laravel 中使用 Vue 组件化开发(配置)



https://github.com/jcc/vue-laravel-example


前置環境



sudo apt-get install nodejs 
sudo apt-get install npm

[Vue.js] 建構大型應用程式



基本上的Vue.js是一個library
如果要做大型專案要配合其他技術才會更完整,
這一篇記錄一下相關的技術資源。
學習前端之路整個變化太快了lol

主要的架構


採用Vue.js 2.0 (組件式寫法,要搭配webpack與es6 js的寫法) + Lavavel 5.2

ES6

由於比較想採用組件式(*.vue)寫法,所以要使用ES6的javascript寫作方式。
另外開一篇筆記記錄=> ES6 在Vue.js的筆記


Webpack 模組管理工具




Webpack 是德國開發者 Tobias Koppers 開發的模組整合工具。
它的核心功能如下:
  • 可同時整合 CommonJSAMD 模組
  • 轉換 JSX, Coffee Script, TypeScript 等
  • 分散封裝專案使用的程式碼,使載入頁面時只需載入當頁所需的程式碼以加速載入速度
  • 整合樣式表 (css, sass, less 等)
  • 處理圖片與字型
  • 建置 production-ready 的程式碼 (壓縮)


如果在Lavavel裡面整合的話,請參考Lavarel Elixir (大大簡化使用gulp的流程)

星期四, 10月 06, 2016

[Vue.js] 組件筆記


記錄一下學習Vue Compoment的筆記

核心ViewModel類


  1. 模板(template):模板声明了数据和最终展现给用户的DOM之间的映射关系。
  2. 初始数据(data):一个组件的初始数据状态。对于可复用的组件来说,这通常是私有的状态。
  3. 接受的外部参数(props):组件之间通过参数来进行数据的传递和共享。参数默认是单向绑定(由上至下),但也可以显式地声明为双向绑定。
  4. 方法(methods):对数据的改动操作一般都在组件的方法内进行。可以通过v-on指令将用户输入事件和组件方法进行绑定。
  5. 生命周期钩子函数(lifecycle hooks):一个组件会触发多个生命周期钩子函数,比如created,attached,destroyed等等。在这些钩子函数中,我们可以封装一些自定义的逻辑。和传统的MVC相比,可以理解为 Controller的逻辑被分散到了这些钩子函数中。=> 要注意1.0與2.0有些事件已經改名字
  6. 私有资源(assets):Vue.js当中将用户自定义的指令、过滤器、组件等统称为资源。由于全局注册资源容易导致命名冲突,一个组件可以声明自己的私有资源。私有资源只有该组件和它的子组件可以调用。

組件註冊

星期二, 10月 04, 2016

[Vue.js] 記錄一下開始學Vue.js的資源


太久沒碰新的前端框架了,至angular 1.x之後就懶了(誤),從去年就一直覺得Vue愈來愈火紅,但舊專案也沒使用的機會,今年打算在新的專案直接套用Vue.js 2.0 + Lavarel,當作今年的小目標好了XD。這篇記錄一些自已想要導入Vue所想到的問題與現在相關的處理方法~慢慢來更新 :D


想到的問題??

SEO
Google的爬蟲已有公告針對js framework所render出來的結構可以有效記錄了。
其他的解決方案還有prerender.io 與 pa

可以參考SSR章節有此問題的解法? http://vuefe.cn/guide/ssr.html

i18n

Router

Asset的precomplier

與jQuery/Bootstrap整合
https://segmentfault.com/a/1190000007020623


與Lavarel整合

第三方元件庫支援

Vue-strap (基於bootstrap)
https://yuche.github.io/vue-strap/#getting-started

iView 高質量組件庫

https://www.iviewui.com/

Element


http://element.eleme.io/#/

學習的簡報

1.0 完整的文件
https://cn.vuejs.org/guide/index.html

2.0 正在翻譯中的...
http://vuefe.cn/guide/

Kuro大神的簡報


星期一, 10月 03, 2016

[php] Fatal error: Maximum execution time of 30 seconds exceeded 超過最長執行時間錯誤

今天寫批次計算演算法時,
發生了此錯誤 Fatal error: Maximum execution time of 30 seconds exceeded
因為預設php是30秒,所以爆開了。
可以簡單為單一執行的程式加入set_time_limit

set_time_limit(0) //則是無上限

沒事不要設定全域的執行時間:D ,想不開可以在php.ini檔設定。
可以找到max_execution_time的設定屬性

星期日, 10月 02, 2016

[Bootstrap] 讓Modal滿版的樣式修正

為了想讓手機RWD的modal滿版效果感覺比較好,找到了下面的sample。

測試環境的bootstrap 3





.modal {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  overflow: hidden;
}

.modal-dialog {
  position: fixed;
  margin: 0;
  width: 100%;
  height: 100%;
  padding: 0;
}

.modal-content {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  border: 2px solid #3c7dcf;
  border-radius: 0;
  box-shadow: none;
}

.modal-header {
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  height: 50px;
  padding: 10px;
  background: #6598d9;
  border: 0;
}

.modal-title {
  font-weight: 300;
  font-size: 2em;
  color: #fff;
  line-height: 30px;
}

.modal-body {
  position: absolute;
  top: 50px;
  bottom: 60px;
  width: 100%;
  font-weight: 300;
  overflow: auto;
}

.modal-footer {
  position: absolute;
  right: 0;
  bottom: 0;
  left: 0;
  height: 60px;
  padding: 10px;
  background: #f1f3f5;
}
https://codepen.io/yewnork/pen/Kpaqeq

星期三, 9月 28, 2016

星期一, 9月 26, 2016

[WordPress] TinyPNG外掛: 省空間的好幫手lol

最近虛擬主機的空機開始不足了,
感覺應該被幾個wp的站台用掉太多圖片空間,找了一下wp的圖片外掛,
原來TinyPNG也有出wordpress外掛,
在你安裝好TinyPNG外掛之後,
可以到TinyPNG申請開發者API KEY

https://tinypng.com/developers



就可以享受每個月五百張的額度。
另外壓縮圖片對於搜尋引擎最佳化(SEO)來說有正面的影響。

星期日, 9月 25, 2016

[工具] 記錄一下免費圖庫的資源

設計師常用的找免費圖庫資源

https://unsplash.com/

http://www.gratisography.com/

[php] PDO 批次插入與更新筆記

記錄批次插入並檢查已存在就更新的寫法



$sql = "INSERT INTO `table` (`id`, `name`) VALUES (?,?),(?,?) ON DUPLICATE KEY UPDATE `name` = VALUES(`name`) ";//將要批次插入的值放到 (?,?),看你要插入幾組
 $values = array(1, "test", 2, "so so");//要插入的值
 $stmt = $this->db->prepare($sql);//建立pdo statment
 $stmt->execute($values);//執行時把要插入的值丟入pdo



http://stackoverflow.com/questions/1176352/pdo-prepared-inserts-multiple-rows-in-single-query

https://gist.github.com/kublaios/007ee6b7b7936c6cd80a

星期三, 8月 31, 2016

[Wordpress] wp_users 與 wp_usermeta tables取值的key

記錄一下常用到get_userdata與get_user_meta常要用取值key的值!!!
  • users
    • ID
    • user_login
    • user_pass
    • user_nicename
    • user_email
    • user_url
    • user_registered
    • display_name
  • user_meta
    • first_name
    • last_name
    • nickname
    • description
    • wp_capabilities (array)
    • admin_color (Theme of your admin page. Default is fresh.)
    • closedpostboxes_page
    • primary_blog
    • rich_editing
    • source_domain

星期一, 8月 29, 2016

[MySQL] 如何判斷要插入新資料還是更新

今天要算一下統計表格需要的sql,如果資料已存在就要更新,反之就插入一筆,記錄一下。


Step1: 未設unique key是會失敗的

ALTER TABLE 你的表格名 ADD UNIQUE (要UNIQUE的欄位)



Step2:
INSERT ... ON DUPLICATE KEY UPDATE:



http://stackoverflow.com/questions/14383503/on-duplicate-key-update-same-as-insert

星期四, 8月 18, 2016

[Wordpress] sql查詢特色圖片(featured images)

如果要查詢縮圖的資訊直接查詢postmeta這張表_wp_attached_file這個meta_key即可。文章縮圖的id則為_thumbnail_id

[Wordpress] 使用自訂的sql抓取WMPL翻譯的文章類型

記錄如何自已下sql取得文章的多國類型,裝的外掛為WMPL。
請注意WMPL此外掛是將翻譯的關連資訊存到mywp_icl_translations



以下為sql語句


select
posts.ID,
posts.post_name,
posts.post_date,

IFNULL((SELECT PM.meta_value FROM mywp_postmeta AS PM WHERE posts.ID = PM.post_id AND PM.meta_key = "your_post_type"),'') as link,
IFNULL((SELECT PM.meta_value FROM mywp_postmeta AS PM WHERE posts.ID = PM.post_id AND PM.meta_key = "_thumbnail_id"),'') as thumbnail_id

FROM mywp_posts AS posts
where
post_status = 'publish'
AND
post_type = 'emel_ad_slider'
AND
ID
IN
(
select element_id from mywp_icl_translations
where element_type = 'post_your_post_type' and language_code = 'zh-hans'
)
order by posts.post_date desc

星期日, 8月 14, 2016

[Paypal] paypal direct payment 直接使用信用卡付款

測試paypal direct payment api的筆記過程。

Website Payments Pro 解決方案

https://developer.paypal.com/docs/classic/products/website-payments-pro/

在Website Payments Pro這一包的產品下,裡面包含以下的整合技術
Direct Payment, Express Checkout, and additional PayPal solutions and tools — like Virtual Terminal, Fraud Management Filters, and reference transactions.

簡介Website Payments Pro
https://developer.paypal.com/docs/classic/paypal-payments-pro/integration-guide/WPWebsitePaymentsPro/

星期一, 8月 08, 2016

[Wordpress] WooCommerce 自訂頁面呼叫相關API


今天要在自訂的php頁面呼叫wc的api記錄,因為老闆說要另外做一頁就這樣搞了XD不要問

載入WP的函式庫

require_once(dirname(dirname(__FILE__)).'/wp-load.php');


星期日, 8月 07, 2016

[Wordpress] 取出指定user meta值的用戶清單


這次想要在wordpress的帳號管理的查詢功能新增自已的user meta key查詢。
使用到的Hook分別為如下:

  • restrict_manage_users ACTION:

這個Action可以替users表格上面的filter區塊自訂我們要的html 語法,這次要做的效果一樣弄一個下拉式選單就OK了。送出後你會發現網址QueryString會加了我們指定的值

// Adds a dropdown to filter users based on a meta field
function add_recommand_filter_into_user_table() {

    global $pagenow;

    if (is_admin() && $pagenow == 'users.php') {
        $optNone = '';
        $optYes = '';
        $optNo = '';
        if(isset($_GET['recommand'])){
          if(strcmp($_GET['recommand'],'1') == 0){
            $optYes  = 'selected="selected"';
          }else{
            $optNo  = 'selected="selected"';
          }
        }else{
           $optNone  = 'selected="selected"';
        }

        echo '';
    }
}
add_action('restrict_manage_users', 'add_recommand_filter_into_user_table');



  • pre_get_users FILTER:


這個Filter簡言之就是要處理我們新增的action所送出的值為何,然後可以重改變動query物件的meta參數
// Updates user query based on filtering criteria
function query_recommand_query_from_user_table($query) {
 
    global $pagenow;

    if (is_admin() && $pagenow == 'users.php' && isset($_GET['recommand'])) {
        $recommandValue = wp_strip_all_tags($_GET['recommand']);
       
       if(strcmp($recommandValue,'') != 0){
          $meta_query = array(
            array(
           'key' => RECOMMAND_KEY,
           'value' => $recommandValue
           )
         ); 
   
         $query->set('meta_key', RECOMMAND_KEY);
         $query->set('meta_query', $meta_query);
        }   
    }
 
}

add_filter('pre_get_users','query_recommand_query_from_user_table');


參考


  1. http://wordpress.stackexchange.com/questions/189077/how-to-get-users-by-a-custom-field-by-user-meta-data
  2. http://www.davemccourt.com/wp-user-filtering/

星期三, 8月 03, 2016

[jQuery] 偵測元素是否進入到viewpoint外掛

今天想要處理偵測用戶scroll的位置判斷是否有進入指定元素viewpoint的議題。
找到以下三個jQuery外掛

http://imakewebthings.com/waypoints/guides/getting-started/

https://github.com/protonet/jquery.inview

https://github.com/morr/jquery.appear

比較過後,暫時先用inview即可解決,
其他二個外掛有比inview強的地方就是增加了offset的參數可設定。
不過inview有pull-request已解決這個功能




[jQuery] Offset 詳細圖


最近在做的專案需要detect 元素的位置,查了一下找到以下這張圖解。
可以清楚了解jQuery offset,筆記一下唷


星期一, 8月 01, 2016

[Wordpress] 擴充User management 的表格欄位

如果你想要自已擴充全部帳號(users.php)頁面,只需要透過二個hook機制就可以快速完成。
所以你就可以自已加欄位加按鈕,做更多客製化操作啦。


  • 使用filter hook: manage_users_columns來擴充欄位
  • 使用action hook: manage_users_custom_column來修改欄位值

範例


參考

https://www.tipsandtricks-hq.com/adding-a-custom-column-to-the-users-table-in-wordpress-7378

[Wordpress] 如何ajax來呼叫 php function

記錄一下如何在wp操作ajax function呼叫php function,意思就是你可以透過hook機制寫自已的api嚕

官網的sample說明


  • action命名規則wp_ajax_[你的方法]
  • action function 命名規則 [你的方法]_callback
tips: 請注意你的方法命名不可以長的不一樣,會無法對應呼叫

add_action( 'wp_ajax_my_action', 'my_action_callback' );

function my_action_callback() {
 global $wpdb; // this is how you get access to the database

 $whatever = intval( $_POST['whatever'] );

 $whatever += 10;

        echo $whatever;

 wp_die(); // this is required to terminate immediately and return a proper response
}

在頁面render一個jquery的方法(因為是範例所以方法很簡單,page_load之後就打)可以搭配admin_enqueue_scripts來整理你自已外掛所需的js
 jQuery(document).ready(function($) {

  var data = {
   'action': 'my_action',
   'whatever': 1234
  };

  // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
  jQuery.post(ajaxurl, data, function(response) {
   alert('Got this from the server: ' + response);
  });
 });

參考

https://codex.wordpress.org/AJAX_in_Plugins

[Wordpress] wp_enqueue_script / wp_enqueue_style 在wp自訂你的js與css檔

wp_enqueue_script 允許我們快速的在wp的頁面加入js函式庫,
反之 wp_enqueue_style讓我們加入樣式檔。

你可以寫法functions.php做全域的載入或至到外掛模組佈景主題裡面做客製化的載入唷

範例

以下範例教你怎麼加入bootstrap框架

function reg_scripts() {
    wp_enqueue_style( 'bootstrapstyle', get_template_directory_uri() . '/css/bootstrap.min.css' );
    wp_enqueue_style( 'bootstrapthemestyle', get_template_directory_uri() . '/css/bootstrap-theme.min.css' );
    wp_enqueue_script( 'bootstrap-script', get_template_directory_uri() . '/js/bootstrap.min.js', array(), true );
}
add_action('wp_enqueue_scripts', 'reg_scripts');

參考


  1. https://digwp.com/2009/06/including-jquery-in-wordpress-the-right-way/
  2. http://stackoverflow.com/questions/26583978/how-to-load-bootstrap-script-and-style-in-functions-php-wordpress
  3. https://codex.wordpress.org/zh-cn:%E5%87%BD%E6%95%B0%E5%8F%82%E8%80%83/wp_enqueue_script

星期四, 7月 28, 2016

[GIT] 分支更新至master最新版本的處理方法筆記

常常遇到branch開工到一半遇到要更新master上面的code,
找了一些Stackoverflow上面的方法來研究看看:

Merge


git checkout develop
git merge master


Cheey-Pick

Rebase


參考


  1. http://stackoverflow.com/questions/3876977/update-git-branches-from-master
  2. https://blog.wu-boy.com/2011/03/git-%E7%89%88%E6%9C%AC%E6%8E%A7%E5%88%B6-branch-model-%E5%88%86%E6%94%AF%E6%A8%A1%E7%B5%84%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%B4%B9/
  3. https://blog.wu-boy.com/2016/04/git-flow-tips/

[jQuery] 視差滾動元件: scrollme 簡單、快速、好上手


最近在做某個網站使用視差效果,原來使用stellar.js,
但網頁滾動起來發生很卡的現像,非常不平滑。
於是又找了到 scrollme這個元件,由於我們的目的可以針對元件某些元素進行一些特效
加上scrollme的效能非常的平滑,使用語意也超級簡單(連教學都不用寫了XD),所以推給大家使用。


http://scrollme.nckprsn.com/

星期三, 7月 27, 2016

[Linux] 常用的一些Server狀態指令


記錄一下Server常用指令集

linux基礎的檔案目錄說明
目錄名稱說明
bin系統的一些重要執行檔Kill、cp、df
boot系統開機的一些載入檔 
cdrom光碟機裡的資料被掛上來的地方 
dosc開機時把dos檔案系統掛上來的地方 
etc系統設定檔 
home使用者的自家目錄所在、ftp server 
lib基本函數庫 
Lost+found系統檢查結果 
mnt可以掛上其它檔案系統 
proc整個系統運作資訊 
root系統管理者的自家目錄所在 
sbin一些設定的可執行程式、設定網路 
tmp雜七雜八的東西 
usr應用程式X-window
var記載著各種系統上的變數的地方 
vmlinuz系統核心檔案 

星期一, 7月 25, 2016

[MAMP] 手動變更php版本

如果想要自行變動php版本的話,可以下載php版本後
放置以下目錄


再修正httpd.conf

sudo vim /Applications/MAMP/conf/apache/httpd.conf


開啟後再修正版本模組即可

#LoadModule php5_module        /Applications/MAMP/bin/php/php5.6.10/modules/libphp5.so

#你想要的版本
LoadModule php5_module        /Applications/MAMP/bin/php/php5.6.24/modules/libphp5.so

[MAMP] Mac的php版本改用MAMP的php版本的方法

直接用MAMP來取代mac原本裝裝php5版本,

請參考下面流程,請注意MAMP_PHP改為你要使用的版本號即可

open terminal, type
touch ~/.bash_profile; open ~/.bash_profile
edit as follows below, save, quite and restart terminal or alternately
source ~/.bash_profile
to execute new PATH without restarting terminal
and in the fashion of the DavidYell's post above, also add the following. You can stack various variables by exporting them followed by a single PATH export which I demonstrated below
export MAMP_PHP=/Applications/MAMP/bin/php/php5.6.10/bin
export MAMP_BINS=/Applications/MAMP/Library/bin
export USERBINS=~/bins
export PATH="$USERBINS:$MAMP_PHP:$MAMP_BINS:$PATH"
http://stackoverflow.com/questions/4145667/how-to-override-the-path-of-php-to-use-the-mamp-path

星期四, 6月 23, 2016

[php] 用命令提示字元檢查語法是否有誤

今天寫物件發生一些sytax錯誤,
開了display_errors, error_reporting都沒什麼錯誤印出來。
於是直接使用cmd line語法檢查..

php -l UserScoreGradeDAO.class.php 
No syntax errors detected in UserScoreGradeDAO.class.php

就會告訴你錯在哪一行了,真的方便多了。

星期二, 6月 21, 2016

[CSS 3] 描繪路徑

http://codepen.io/paintbycode/pen/JDbcF/
下拉Iron Man範例

如果要用Stroke效果來描述的話,需要計算path的數值。
以下記錄一下計算的方法

純JS
var path = document.querySelector('path');
var length = path.getTotalLength();

jQuery的方法
var path = $('#目的元素').get(0);
var pathLen = path.getTotalLength();

星期一, 6月 13, 2016

[ubuntu] 調整系統時間與時區

最近在裝VM踩到系統時間未設定正確的雷,導致API的授權認證一直過期。
記錄一下這個腦洞的錯誤。


#查看系統時間 (發現時間錯誤)
date


Sun Apr 10 19:12:58 CST 2016 

#國家時間與頻率標準實驗室
sudo ntpdate time.stdtime.gov.tw
Tue Jun 14 10:20:14 CST 2016

#將硬體時間與系統時間同步
sudo hwclock -w

#重設時區 (需為root的權限)
sudo dpkg-reconfigure tzdata

Local time is now:      Sun Apr 10 19:14:39 CST 2016.
Universal Time is now:  Sun Apr 10 11:14:39 UTC 2016.


星期日, 6月 12, 2016

[C] error: unknown type name 'bool'這種錯誤

error: unknown type name 'bool'這種錯誤
可以加入#include

或換編譯 C99之後才有 http://zh.wikipedia.org/wiki/Stdbool.h

[ubuntu] 常用的指令


記錄一下常用的指令集

安裝SMB


#安裝
apt-get install samba


#安裝完畢後,先暫停服務修改設定檔.
/etc/init.d/samba stop


#編輯設定檔
sudo vim /etc/samba/smb.conf


#測試設定檔有無錯誤 (不用在指定的目錄下執行即可)
testparm





#重新啟動
/etc/init.d/samba restart

#顯示目前smb的狀態

sudo smbstatus


#新版後的ubuntu

sudo service smbd start
Stop
sudo service smbd stop
Restart
sudo service smbd restart

網路設定


[CSS] 使用css transition 做出underline的效果

作者示範了各種underline的動畫效果,有需要的朋友可以參考一下。
我的案例需要下圖中記錄的SlideIn效果。


http://bradsknutson.com/blog/css-sliding-underline/

星期二, 5月 24, 2016

[PHP] php-extension: 範例練習

經過前幾次的練習與說明,筆記一下因為自已的需求測試的範例


範例: 從自已建一個額外的C語言的檔案呼叫



1.修正一下config.m4指定載入額外的C語言

dnl config.m4 for extension


PHP_ARG_ENABLE(foo, whether to enable foo extension support,
  [--enable-foo Enable foo extension support])

dnl 檢測extension是否已被啟動
if test $PHP_FOO != "no"; then

 AC_MSG_CHECKING("start to enable extension");

  dnl PHP_NEW_EXTENSION(foo, php_foo.c, $ext_shared)

  dnl 注意多引用了自定義C語言func
    PHP_NEW_EXTENSION(foo, php_foo.c hello_world_c.c, $ext_shared)


fi


2.先建立自已的C的實作與標頭檔
hello_world_c.h, hello_world_c.c

int hello_world_c_add(int, int);


/*Hello World program*/

#include <stdio.h>
#include "hello_world_c.h"

int hello_world_c_add(int a,int b){
 int sum = 0;
 printf("hello_world_c_add is coming Orz\n");
 printf("%d\n", a);
 printf("%d\n", b);
 sum = a+b;
 printf("sum=%d\n", sum);

 return sum;
}
int main(){
 printf("Hello World C :D");
 printf("sum=%d",hello_world_c_add(10,10));
 return 0;
}


3. 在php_foo.c裡面include hello_world_c.h檔


#include "hello_world_c.h"//內部的c func

#include "php_foo.h"

#if COMPILE_DL_FOO
ZEND_GET_MODULE(foo)
#endif

....

3. 新增一個PHP_FUNCTION: 呼叫剛剛的hello_world_c_add


//呼叫自定義的c函數,來處理加法

PHP_FUNCTION(foo_hello_add) {

  php_printf("run foo_hello_add\n");

  int val1;
  int val2;
  int sum;

  //parse parameters
  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ll", &val1,&val2 ) == FAILURE) {
      RETURN_FALSE;
  }

  php_printf("val1=%d\n",val1);
  php_printf("val2=%d\n",val2);

  sum = hello_world_c_add(val1,val2);

  RETURN_DOUBLE(sum);
}




範例: C實作/標頭檔搬到子資料夾




接著想把不同自定義的C函式庫分裝到不同的sub-folder後就爆了以下訊息:



目前這個範例卡關中...

範例: 全域變數的操作




範例: 回傳resouce



參考




  • https://github.com/jheth/hello-php-extension
  • 在 PHP Extension 中加入 static 和 dynamic library
  • Linux静态链接库与动态链接库的区别及动态库的创建
  • Linux中创建静态库和动态库
  • http://php.net/manual/en/internals2.structure.globals.php
  • https://github.com/walu/phpbook/blob/master/12.5.md


星期一, 5月 23, 2016

[PHP] php-extension編譯C++


如有c++函式庫需要處理,請在config.m4加入以下指令:

PHP_REQUIRE_CXX()

PHP_SUBST(YOUREXTENSION_SHARED_LIBADD)

PHP_ADD_LIBRARY_WITH_PATH(stdc++, "", YOUREXTENSION_SHARED_LIBADD)

PHP_ADD_LIBRARY(stdc++,EXTRA_LDFLAGS)

dnl 上面設定好了,PHP_NEW_EXTENSION的第二個參數就可以輸入 c++的檔案了,下面的例子還是C
PHP_NEW_EXTENSION(foo, php_foo.c, $ext_shared)

[PHP] config.m4 指令集筆記

記錄一下一定會忘記的php-ext常用的指令說明。

指令集

  • AC_MSG_CHECKING 
畫面輸出訊息 checking whether to enable foo extension support 
 
  • PHP_SUBST 


PHP_SUBST(XXXX_SHARED_LIBADD), 其中 XXXX 為 PHP Extension 的名稱 (全大寫)


  • PHP_ADD_LIBRARY_WITH_PATH 
  • PHP_CHECK_LIBRARY
  • PHP_ADD_INCLUDE 
  • PHP_ADD_BUILD_DIR 

  • PHP_ADD_LIBRARY_WITH_PATH 


完整指令

XXXX: 你想要載入的extension name


PHP_ADD_LIBRARY_WITH_PATH([library name], [library path], XXXX_SHARED_LIBADD)


例如我們想加入 libabc.so, 而該檔案在 /usr/lib, 則我們會加入: PHP_ADD_LIBRARY_WITH_PATH(abc, /usr/lib, XXXX_SHARED_LIBADD)

  • PHP_NEW_EXTENSION 
完整指令 PHP_NEW_EXTENSION(extname, sources [, shared [,sapi_class[, extra-cflags]]])
範例 PHP_NEW_EXTENSION(foo, foo.c bar.c baz.cpp, $ext_shared)

參考
http://tglcowcow.blogspot.tw/2008/05/php-extension-static-dynamic-library.html

星期五, 5月 20, 2016

[Flickrlinkr] phpFlickr: The web service endpoint returned a "HTTP/1.1 403 Forbidden" response


今天在VM重建flickrlinkr偵錯時發生了以下錯誤:


The web service endpoint returned a "HTTP/1.1 403 Forbidden" response


由於使用phpFlickr類別時,有用到curl,所以請安裝curl for php元件


安裝方法如下


sudo apt-get install php5-curl


安裝完畢後,請重啟apache2

sudo service apache2 restart

[GIT] server certificate verification failed. 錯誤排除

fatal: unable to access 'https://bigd@bitbucket.org/shark_tech/thegrand.git/': server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none


bigd@ubuntu:/var/www/thegrand$  export GIT_SSL_NO_VERIFY=1

bigd@ubuntu:/var/www/thegrand$  git submodule update --init --recursive

星期三, 5月 18, 2016

[CSS 3動畫] animation 語法動畫筆記

最近一些case需要使用大量的css動畫,把一些處理到的指令筆記一下


animation的短指令

animation: name duration timing-function delay iteration-count direction;



定義動畫結束後如何停止最後一個狀態

animation-fill-mode : none | forwards | backwards | both;


none:不改变默认行为。

forwards :当动画完成后,保持最后一个属性值(在最后一个关键帧中定义)。

backwards:在 animation-delay 所指定的一段时间内,在动画显示之前,应用开始属性值(在第一个关键帧中定义)。

both:向前和向后填充模式都被应用。

星期一, 5月 16, 2016

[PHP] php extension 初試: extension parser parameter (接收參數)


接續先前的基本範例,接著要來練習怎麼接收帶入extension的參數:


zend_parse_parameters方法

zend_parse_parameters提供不同的接收變數的方式, 變數1: ZEND_NUM_ARGS() TSRMLS_CC, 二個值中間是空白,ZEND_NUM_ARGS表示傳入參數的個數 變數2: 傳入變數的格式化字串

星期五, 5月 13, 2016

[PHP] php extension 初試

拜讀完php-extension骨架練習,
如果C語言忘得差不多錄影檔有從基本的C語言開始教起:D


如果C語言已經很熟的話,可以跳至26:38秒開始

測試環境

  1. MacOSX EI
  2. MAMP (所以流程中有其他錯誤要處理一下:D)

ZVal是什麼

http://php.net/manual/en/internals2.variables.intro.php



Note:


PHP is a dynamic, loosely typed language, that uses copy-on-write and reference counting.
所有的php變數型態都是定義在一個zval的struct,並且使用copy-on-write(寫入時複製)與reference counting(來判斷變數是否還有被使用)。

Null-Terminated String



初始化 ZVAL



簡化


ZVAL設定值

ZVAL_STRING
ZVAL_LONG
ZVAL_BOOL

星期二, 5月 10, 2016

星期五, 5月 06, 2016

[PHP] ffmepg 相關筆記

最近工作需要用到一些audio的處理,記錄一下相關的ffmpeg討論資源。

php 使用exec 執行 ffmpeg指令
http://www.phpro.org/tutorials/Video-Conversion-With-FFMPEG.html

Binary data 處理
http://blog-en.openalfa.com/how-to-work-with-binary-data-in-php

Audio codec:
https://trac.ffmpeg.org/wiki/audio%20types

讀取WAV檔
http://www.mcpressonline.com/web-languages/easily-manage-wav-files-with-php.html

WAV file/read
https://gist.github.com/Xeoncross/3515883
https://github.com/boyhagemann/Wave

音频格式详解:WAV
http://www.aliog.com/39896.html

READ WAV
http://www.bloggingzeal.com/how-to-read-a-wav-file-with-php/

pack/unpack format
a - NUL-padded string
A - SPACE-padded string
h - Hex string, low nibble first
H - Hex string, high nibble first
c - signed char
C - unsigned char
s - signed short (always 16 bit, machine byte order)
S - unsigned short (always 16 bit, machine byte order)
n - unsigned short (always 16 bit, big endian byte order)
v - unsigned short (always 16 bit, little endian byte order)
i - signed integer (machine dependent size and byte order)
I - unsigned integer (machine dependent size and byte order)
l - signed long (always 32 bit, machine byte order)
L - unsigned long (always 32 bit, machine byte order)
N - unsigned long (always 32 bit, big endian byte order)
V - unsigned long (always 32 bit, little endian byte order)
f - float (machine dependent size and representation)
d - double (machine dependent size and representation)
x - NUL byte
X - Back up one byte
@ - NUL-fill to absolute position

a一个填充空的字节串
A一个填充空格的字节串
b一个位串,在每个字节里位的顺序都是升序
B一个位串,在每个字节里位的顺序都是降序
c一个有符号char(8位整数)值
C一个无符号char(8位整数)值;关于Unicode参阅U
d本机格式的双精度浮点数
f本机格式的单精度浮点数
h一个十六进制串,低四位在前
H一个十六进制串,高四位在前
i一个有符号整数值,本机格式
I一个无符号整数值,本机格式
l一个有符号长整形,总是32位
L一个无符号长整形,总是32位
n一个16位短整形,“网络”字节序(大头在前)
N一个32位短整形,“网络”字节序(大头在前)
p一个指向空结尾的字串的指针
P一个指向定长字串的指针
q一个有符号四倍(64位整数)值
Q一个无符号四倍(64位整数)值
s一个有符号短整数值,总是16位
S一个无符号短整数值,总是16位,字节序跟机器芯片有关
u一个无编码的字串
U一个Unicode字符数字
v一个“VAX”字节序(小头在前)的16位短整数
V一个“VAX”字节序(小头在前)的32位短整数
w一个BER压缩的整数
x一个空字节(向前忽略一个字节)
X备份一个字节
Z一个空结束的(和空填充的)字节串

其他你感興趣的文章

Related Posts with Thumbnails