自由學習的風

幽夢影 張潮 少年讀書,如隙中窺月;中年讀書,如庭中望月;老年讀書,如臺上玩月。皆以閱歷之淺深,為所得之淺深耳。
顯示具有 php 標籤的文章。 顯示所有文章
顯示具有 php 標籤的文章。 顯示所有文章

VS Code integreted terminial 的環境變數沒有更新

2023年1月15日 星期日

執行環境:

  • Windows 11 21H2(22000.1042)
  • Laragon 5.0(6.0)
  • VSCode
  • CodeIgniter 4.1.9

在Windows環境上利用 Laragon 來建立 PHP 開發環境十分方便,可以快整切換 PHP 版本,程式撰寫則用  VSCode,本來都沒啥問題,不過,這兩天測試之前建立的 CodeIgniter 4,它的版本是  4.1.9,看官網已經出到  4.3.0,不過需要 PHP 7.4 以上,但是之前都在 PHP 7.3 開發,結果在 Laragon 切換成 PHP 7.4 後,VSCode integreted terminial 顯示的還是  PHP 7.3。

試了下列動作:

  1. 把 VSCode 全部關掉,重新再執行 => 無效
  2. 檢查電腦環境變數,PATH 沒有設定 PHP 路徑
  3. 將 PHP 7.4 路徑加入 PATH 環境變數 => 無效

本來以為是電腦出問題了,後來看到一份資料,需要從終端機直接執行 VSCode,讚!有效,解決了,平時我都是按 Win Key,再直接執行,沒想到執行方式不一樣會造成這種影響。


讀取 空氣品質指標(AQI) 的OpenData 資料

2022年10月15日 星期六

一、前由

前2天有位夥伴反應一個問題,之前讀取線上的 空氣品質指標(AQI) 資料時可以秒開,可是現在已經換成新的網址,結果讀取時間變得得慢,想請教大家有沒有解法。

 1. 空氣品質指標(AQI) 舊網址:http://opendata2.epa.gov.tw/AQI.json

 2. 空氣品質指標(AQI) 新網址:ttps://data.epa.gov.tw/api/v2/aqx_p_432?api_key=e8dd42e6-9b8b-43f8-991e-b3dee723a52d&limit=1000&sort=ImportDate desc&format=JSON

二、測試、找原因

直接用瀏覽器開AQI 舊網址,果然秒開;接著瀏覽器再開新 AQI 網址,心裡默數,回應時間不一定,從6秒~11秒都有,換成 Windows PowerShell終端機,利用 curl 指令來抓取新網址,也是一樣的回應時間。

查了資料,發現新網址是環保署的服務,也有提供 API 的操作手冊,  裡面有提供 filter 來過濾回傳的內容資料,參考操作手冊,直接在網址上加上 filter 的條件,情況還是一樣,而且 filter 條件並沒有作用

不死心,又查了一下資料,有篇文章「MicroPython 空氣品質 AQI 獲取之方式」有提到抓取資料改成要申請 API_KEY、換成 HTTPS 協定,以及利用 filters 的 API 語法來指定查詢的項目。所以我就去申請了一組 API_KEY 準備看看是否正常,唉!無效,還是一樣慢,API 語法也沒有作用……

總覺得不太可能提供給全國查詢的服務會這麼慢,所以直接利用 php 去抓網頁資料,Guess What ?

秒回啊!

三、實作

利用簡單的語法寫了簡單抓不同城市的 AQI 資料,回應速度快,滿意,結案!

<h2>空氣品質指標(AQI)查詢</h2>
<form action="" method="POST">

  <select name="county" id="">
    <option value="新北市">新北市</option>
    <option value="高雄市">高雄市</option>
    <option value="臺北市">臺北市</option>
    <option value="臺中市">臺中市</option>
    <option value="臺南市">臺南市</option>
  </select>

  <input type="submit" value="查詢">

</form>

<?php
if (isset($_POST["county"]) &&  $_POST["county"] != "") {
  $county = $_POST["county"] ?? '新北市';
  $key = 'e8dd42e6-9b8b-43f8-991e-b3dee723a52d';
  $filter = 'county,EQ,' . $county;
  $url = sprintf('https://data.epa.gov.tw/api/v2/aqx_p_432?filters=%s&api_key=%s&format=json', $filter, $key);
  $data =  file_get_contents($url);

  $jsondata = json_decode($data);

  echo ('<h2>' . $county . '</h2>');
  var_dump($jsondata->records);
}


四、後記

後來發現 Windows 底下的 curl  指令有點"不好操控",利用 Linux 環境直接下 curl 指令,回應速度也是秒開。



[php] 學生作業系統 - 評分便利篇

2021年1月11日 星期一

目標:

  1. 作品圖片可以一列多個作品。
  2. 作品存取日期在一周內會顯示顯目底色。

[PHP]虛擬資料產生器

2020年7月13日 星期一

暑假研習,剛好需好一些資料來測試,有些沒有權限下載自己學校的學生資料,只好動手刻個虛擬資料產生器…,不得不說,巨人的肩膀夠硬啊!直接引用套件(專案)節省很多時間。

  1. 中文姓名
  2. 出生年月日
  3. 學號
  4. 住址
  5. 郵遞區號
  6. 身分證字號(這有點敏感,就不列出來了)




轉:建立安全的登入模組

2019年5月5日 星期日

原文:https://en.wikibooks.org/wiki/PHP_Programming/Building_a_secure_user_login_system

關鍵點:
$timeout = 60 * 30; // In seconds, i.e. 30 minutes.
$fingerprint = hash_hmac('sha256', $_SERVER['HTTP_USER_AGENT'], hash('sha256', $_SERVER['REMOTE_ADDR'], true));
session_start();
if (    (isset($_SESSION['last_active']) && $_SESSION['last_active']<(time()-$timeout))
     || (isset($_SESSION['fingerprint']) && $_SESSION['fingerprint']!=$fingerprint)
     || isset($_GET['logout'])
    )
{
    setcookie(session_name(), '', time()-3600, '/');
    session_destroy();
}
session_regenerate_id(); 
$_SESSION['last_active'] = time();
$_SESSION['fingerprint'] = $fingerprint;
// User authenticated at this point (i.e. $_SESSION['email_address'] can be trusted).

[轉貼] 使用vscode達到 php 運行 live-server ,存檔即時變更頁面

2018年11月29日 星期四


〔筆記〕使用vscode達到 php 運行 live-server ,存檔即時變更頁面
今天要來紀錄怎麼使用VSCode達到 php 運行 live-server ,存檔即時變更
因為在撰寫html上,html屬於用戶端(Client-side),作業上都是在客戶端進行不會有server端的問題,所以進行存檔頁面即變更較為簡易,網路上也有很多套件可以用 。
可是在php上,php屬於伺服器端(Server-Side),一變更小則前端頁面變化大則連動到伺服器、資料庫的變動,所以在live-server上的可行性一直以來都是一個問題!
不過現在VScode做到了可以將php的檔案運行live-server,在開發上順暢很多!
也大大縮短了時間,不用在存檔→去頁面按重新整理→在debug了~
現在就來紀錄設定過程。
....

轉:[教學文章] phpExcel常用方法詳解

2018年6月5日 星期二

參考網址:EMAN1214

操作excel

1.header
        header("Content-Type:application/vnd.ms-excel");
        header("Content-Disposition:attachment;filename=product.xls");
        header("Pragma:no-cache");
        header("Expires:0");

2.PHPExcel
        http://www.codeplex.com/PHPExcel
        http://www.phpexcel.net
        開發包Tests目錄有詳細使用實例
        支持中文,注意文件編碼,文件保存為utf-8
        寫excel
詳情參閱相關文件內容。

[PHP] 網頁轉向

2018年5月2日 星期三

Opt 1:
$sec = 0;
$page = 'index.php';
header("Refresh: $sec; url=$page");

Opt 2:
$page = 'index.php';
header("Location: " . $page);
or
$page = 'index.php';
header("Location: " . $page, true, 301);

[轉][CodeIgniter] 利用 hook 來處理全部的輸出

2017年9月17日 星期日

參考 http://lzzpnk.blogspot.tw/2012/06/codeigniter-hook-alt.html

1. 在 ./application/config/config.php
 $config['enable_hooks'] = TRUE;


2. ./application/config/hooks.php 設定執行的程式
$hook['display_override'][] = array(
        'class'    => '',
        'function' => 'images_auto_set_alt',
        'filename' => 'output.php',
        'filepath' => 'hooks',
        'params'   => array( 'output_display' => TRUE )
    );​ 
3. ./application/hook/output.php
/**
     * 將輸出的 圖片(<img>) 進行處理;自動配置 alt 屬性。
     *
     * @param array   $setting=array() 設定
     *                $setting['output_display'] => 是否直接輸出給瀏覽器。FALSE代表不直接輸出,僅回存至buffer。
     * @return NULL                    不會回傳東西。
     */
    function images_auto_set_alt( $setting=array() ) {
        $CI =& get_instance();
        $CI->load->library( 'simple_html_dom' ); // require_once APPPATH . 'libraries/simple_html_dom.php';
        $buffer = $CI->output->get_output();
        $DOM = str_get_html( $buffer );
        foreach ( $DOM->find( 'img' ) as $key => $img ) {
            if ( empty( $img->alt ) && ! strpos( $img->alt, $CI->config->item( 'site_name' ) ) ) {
                $img->alt = $CI->config->item( 'site_name' );
            }
            else {
                $img->alt .= ' - ' . $CI->config->item( 'site_name' );
            }
        }
        $CI->output->set_output( $DOM->save() );
        if ( $setting['output_display'] ) {
            $CI->output->_display();
        }
    } 

[CodeIgniter] 將 Session 資料存入資料庫

2017年9月2日 星期六

Reference: http://superlevin.ifengyuan.tw/codeigniter3-0%E5%B0%87session%E5%AF%AB%E5%85%A5db/

CREATE TABLE IF NOT EXISTS `ci_sessions` (        `id` varchar(40) NOT NULL,        `ip_address` varchar(45) NOT NULL,        `timestamp` int(10) unsigned DEFAULT 0 NOT NULL,        `data` blob NOT NULL,        PRIMARY KEY (id),        KEY `ci_sessions_timestamp` (`timestamp`));


設定 application/config/config.php
$config['sess_driver'] = 'database';$config['sess_save_path'] = 'ci_sessions';









[CodeIgniter] 讀取 2 個資料庫

Reference: stack overflow https://stackoverflow.com/questions/8268853/codeigniter-multiple-database-connections#

同時連線2個資料庫

Database 1:
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "database_name";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
$db['default']['swap_pre'] = "";
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
Database 2:
$db['otherdb']['hostname'] = "localhost";
$db['otherdb']['username'] = "root";
$db['otherdb']['password'] = "";
$db['otherdb']['database'] = "other_database_name";
$db['otherdb']['dbdriver'] = "mysql";
$db['otherdb']['dbprefix'] = "";
$db['otherdb']['pconnect'] = TRUE;
$db['otherdb']['db_debug'] = FALSE;
$db['otherdb']['cache_on'] = FALSE;
$db['otherdb']['cachedir'] = "";
$db['otherdb']['char_set'] = "utf8";
$db['otherdb']['dbcollat'] = "utf8_general_ci";
$db['otherdb']['swap_pre'] = "";
$db['otherdb']['autoinit'] = TRUE;
$db['otherdb']['stricton'] = FALSE;

Use it:
function my_model_method()
{
  $otherdb = $this->load->database('otherdb', TRUE); // the TRUE paramater tells CI that you'd like to return the database object.

  $query = $otherdb->select('first_name, last_name')->get('person');
  var_dump($query);
}