顯示具有 php 標籤的文章。 顯示所有文章
顯示具有 php 標籤的文章。 顯示所有文章

2020年10月29日 星期四

Laravel & Google BigQuery

 

因為最近要從Firebase Cloud Message發出訊息通知,並要將發送的結果撈出,所以做了點筆記。免得以後忘記。

安裝官方版套件:
  • 安裝:
            在Laravel 安裝 官方版BigQuery套件 composer require google/cloud-bigquery
    
  • 認證方式: 
      有兩種方式可以設定認證方式
      use Google\Cloud\BigQuery\BigQueryClient;

      // Authenticating with keyfile data.
        $bigquery= new BigQueryClient([
        'keyFile' => json_decode(file_get_contents('/path/to/keyfile.json'), true)
        ]);

        // Authenticating with a keyfile path.
        $bigquery= new BigQueryClient([
        'keyFilePath' => '/path/to/keyfile.json'
        ]);

        另外還需要提供Google Cloud project ID才能往下做下去.
        // Providing the Google Cloud project ID.
        $bigquery= new BigQueryClient([
        'projectId' => 'myProject'
        ]);
    
  • 範例:
         public function run_query(){
            $bigQuery = new BigQueryClient([
                'keyFilePath' => "../".env('GOOGLE_APPLICATION_CREDENTIALS'),
                'projectId' => "project_id",
            ]);
        
            // 统计消息指向的非重复应用实例(instance)的数量
            $query = "SELECT COUNT(DISTINCT instance_id)
            FROM `project_id.firebase_messaging.data`
            WHERE
            _PARTITIONTIME = TIMESTAMP('2020-10-27')
            AND event = 'MESSAGE_ACCEPTED';";
        
            $queryJobConfig = $bigQuery->query($query);
            
            $queryResults = $bigQuery->runQuery($queryJobConfig);
        
            foreach ($queryResults as $row) {
                print_r($row);
            }
        }

將內容抓出後可能會看到一些欄位與相關的單詞,可以參考下面的表格內容:
_PARTITIONTIME时间戳此伪代码列包含数据加载当天的起始的时间戳(采用世界协调时间 (UTC))。对于 YYYYMMDD 分区的情况,此伪代码列包含值 TIMESTAMP('YYYY-MM-DD')。
event_timestamp时间戳服务器记录的事件时间戳
project_numberINTEGER发送消息的项目的唯一编号
message_idSTRING消息 ID 用于标识消息。消息 ID 根据应用 ID 和时间戳生成,在某些情况下可能不是全局唯一的。
instance_idSTRING消息发送到的应用的实例 ID(如有)
message_typeSTRING消息的类型。可以是通知消息或数据消息。主题用于标识主题或广告系列发送的原始消息;后续消息则为通知消息或数据消息。
sdk_platformSTRING接收消息的应用所在的平台
app_nameSTRINGAndroid 应用的软件包名称或 iOS 应用的软件包 ID
collapse_keySTRING标识一组可折叠消息的折叠键。若未连接设备,则仅具有给定折叠键的最后一条消息将排队等待最终传送。
优先级INTEGER消息的优先级。有效值包括“normal”(普通)和“high”(高)。在 iOS 中,这些值相当于 APNs 优先级中的 5 和 10
ttlINTEGER此参数指定设备离线后消息在 FCM 存储中保留的时长(以秒为单位)
topicSTRING消息发送到主题的名称(如适用)
bulk_idINTEGER标识一组相关消息(例如向某个特定主题发送的一组消息)的批量 ID
事件STRING事件的类型。可能的值包括:MESSAGE_ACCEPTED:FCM 服务器收到消息,且请求有效;
MESSAGE_DELIVERED:消息已发送到设备上的应用的 FCM SDK。默认情况下,此字段不会被传播。要启用此功能,请按照 [`setDeliveryMetricsExportToBigQuery(boolean)`](https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessaging#public-void-setdeliverymetricsexporttobigquery-boolean-enable)) 中的说明进行操作。

MISSING_REGISTRATIONS:由于注册缺失,请求被拒绝;
UNAUTHORIZED_REGISTRATION:消息被拒绝,因为发送者无权向注册发送消息;
MESSAGE_RECEIVED_INTERNAL_ERROR:处理消息请求时发生不明错误;
MISMATCH_SENDER_ID:由于发送消息的发送者 ID 与声明的端点 ID 消息不匹配,发送消息的请求被拒绝;
QUOTA_EXCEEDED:由于配额不足,发送消息的请求被拒绝;
INVALID_REGISTRATION:由于注册无效,发送消息的请求被拒绝;
INVALID_PACKAGE_NAME:由于软件包的名称无效,发送消息的请求被拒绝;
INVALID_APNS_CREDENTIAL:由于 APNS 证书无效,发送消息的请求被拒绝;
INVALID_PARAMETERS:由于参数无效,发送消息的请求被拒绝;
PAYLOAD_TOO_LARGE:由于负载超出限制,发送消息的请求被拒绝;
AUTHENTICATION_ERROR:由于出现身份验证错误,发送消息的请求被拒绝(请检查用于发送消息的 API 密钥);
INVALID_TTL:由于 TTL 无效,发送消息的请求被拒绝。
analytics_label字符串借助 HTTP v1 API 时,可以在发送消息时设置分析标签,以便标记消息以供分析之用
  • 參考網址:

2017年6月1日 星期四

composer install or update package in the Bitbucket

修改會用到此package的專案下的composer.json
1.在"require"或是"require-dev"裡新增一筆要安裝的套件資訊.其中如果這個套件還在開發中的話請填寫bitbucket對應的branch.branch如果是master的話請在前面加上『dev-』變成dev-master。
例如:
"require" : {
        "php" : ">=5.6.4",
        "bitbucket_account/packagename": "dev-master"
    },

2.如果這套件沒有註冊到Packagist上所示私有套件,我們需要在下方多加一段repositories資訊
例如:
"repositories": [
        {
            "type": "package",
            "package": {
                "name": "bitbucket_accoun/packagename",
                "version": "master",
                "source": {
                    "type": "git",
                    "url": "https://bitbucket_account@bitbucket.org/bitbucket_account/packagename.git",
                    "reference": "master"
                },
                "autoload": {
                    "psr-4": {
                        "package_namespace" : "src/"
                    }
                }
            }
        }
    ],

上面的version與reference皆是對應到bitbucket對應的branch.
psr-4下的package_namespace 裡的斜線要寫成\\。如"psr-4":{"Ace\\King\\":src/"}


composer.json的說明可以看這裡(官方說明文件)

2017年5月23日 星期二

Laravel5+Docker Windows開發環境安裝

開發環境:WINDOWS 10 ,Ecplise(Neon.3 Release 4.6.3),PHP 5.6,Laravel 5.3
執行環境:WAMP,Docker, AWS EC2,AWS RDS


1.先在windows下載安裝composer(可以參考這裡)

2.接著安裝Laravel5

composer global require "laravel/installer"
安裝完後要記得確定把 ~/.composer/vendor/bin 路徑放置於你的 PATH 或是 開發專案 裡,這樣 laravel 執行檔就會存在於你的系統之中。

3.開啟一個新專案
     3.1 進入命令提示字元( 開始→執行  cmd )
     3.2 進入專案上層路徑( 例如 cd  c:/wamp64/www )
     3.3 輸入 composer create-project laravel/laravel laravel_test 按下enter 系統就會去建立專案所需的檔案。最後看到Application key [base64:~~~~~~~~~~~] set successfully.就表示專案已經建立完成了!

      
     3.4 測試一下local 連結http://localhost/laravel_test/public/ 會出現下圖


     
4.將此開發環境放到Docker裡去
   因為公司之後要上線的環境會以Docker的方式在AWS ECS上執行,所以就先將此專案開發環境變成一個Docker Container。
   4.1 進入Windows PowerShell只要下這個指令:
       docker run -idt --name 專案名稱 -p 8100:80 -v /你的.aws位置/.aws/:/root/.aws/ -v /你的local專案路徑/:/var/www/html/專案名稱/資料卷名稱
如 docker run -idt --name laravel_test -p 8080:80 -v C:\Users\Asus\.aws:/root/.aws/ -v  c:/wamp64/www/laravel_test/:/var/www/html/laravel_test php:5.6.30-apache
就會將此環境對應到docker container裡去。
    
     4.2 測試一下輸入local docker網址:http://localhost:8100/laravel_test/public/ 會出現跟之前一樣的畫面


     
這樣就完成了Laravel5環境的安裝了!!!

2015年7月16日 星期四

當Drupal時出現Mysql has gone away的問題時怎麼處理

這兩天Drupal出現問題剛開始時是想要新增Content type時出現這樣的畫面
  
不知道該如何解決時都執行幾次後,整個Drupal竟然沒法進入了。會出現下面這個畫面:


上網爬了很久幾乎都是說要增加mysql的max_allowed_packet到16M以上及加大php的memory limit size。

那就把AWS EC2上的設定改一下囉(我的Drupal 是裝在EC2上)。
先來修改mysql的設定吧。
sudo vim /etc/my.cnf

按 i 輸入以下文字

[mysqld]
max_allowed_packet = 64M

然後按下esc後輸入:wq存檔離開
重新啟動 mysql

sudo service mysqld stop
sudo service mysqld start

但是發現drupal 可以進入了不會出現Additional uncaught exception thrown while handling exception的錯誤但是還是不能新增Content type。
只好改 max_allowed_packet =256M

並一起修改php memory limit
sudo vim /etc/php.ini
找到memory_limit按i輸入修改為
memory_limit = 256M
然後按下esc後輸入:wq存檔離開

重新啟動apache跟mysql
sudo service httpd stop
sudo service httpd start
sudo service mysqld stop
sudo service mysqld start

終於可以成功進入drupal 並新增content type了。
進入後終於找到元兇了.......
因為我之前有安裝過token這個module。

token module 是個需要很大memory的一個模組如果沒有需要的話就關閉好了。


註:後來發現網路上也有一篇再說這個問題的討論,裡面說是auto_nodetitle 這個module照成上述問題的,內有提供兩個patch檔,用來配合修改一下auto_nodetitlle.module後,這個問題應該算是解決了。

https://www.drupal.org/node/1391706