PHP 透過 Google Map Geocode取得地址的經緯度

[php]
$address = $_GET["address"];
$url = "http://maps.google.com/maps/api/geocode/json?address=$address&sensor=false";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response_a = json_decode($response);
echo "您的地址:".$address."<br/>";
echo "所在的經度(latitude):".$lat = $response_a->results[0]->geometry->location->lat;
echo "<br />";
echo "所在的緯度(longitude):".$long = $response_a->results[0]->geometry->location->lng;
[/php]

Delphi 搭配 CodeIgniter上傳檔案

php端

[php]
$str_no = $this->input->post(‘strid’);
$filename1 = $this->input->post(‘filename’);
$config[‘upload_path’] = ‘./uploads/’;
$new_name = $str_no.’-‘.$filename1;
$config[‘file_name’] = $new_name;
$config[‘allowed_types’] = ‘*’;
$config[‘max_size’] = ‘1000000000’;

$this->load->library(‘upload’,$config);

if ( ! $this->upload->do_upload(‘myfile’))
{
$error = array(‘error’ => $this->upload->display_errors());

}
else{
$data = array(‘upload_data’ => $this->upload->data());
print_r($data);
}
[php]

Delphi

use IdMultipartFormData
var
PostData: TIdMultipartFormDataStream;
begin
PostData := TIdMultipartFormDataStream.Create;
try
PostData.AddFile(‘myfile’, Self.GetApplicationPath + ‘\file.ini’);
PostData.AddFormField(‘strid’,’999′);
PostData.AddFormField(‘filename’,’file.ini’);

idhttp1.Post(‘http://xxxx/Home/upload/’, PostData)
finally
PostData.Free;
end;

FastReport新版測試

[C#]
DataSet FDataSet;
// 建立資料集
FDataSet = new DataSet();
DataTable table = new DataTable();
table.TableName = “Employees”;
FDataSet.Tables.Add(table);
table.Columns.Add(“ID”, typeof(int));
table.Columns.Add(“Name”, typeof(string));
table.Rows.Add(1, “Andrew Fuller”);
table.Rows.Add(2, “Nancy Davolio”);
table.Rows.Add(3, “Margaret Peacock”);
// 建立報表
Report report = new Report();
// 載入報表
report.Load(@”..\..\report.frx”);

// 註冊資料集
report.RegisterData(FDataSet);
report.GetDataSource(“Employees”).Enabled = true;
// 1 進入設計模式
 report.Design();
// 2 顯示報表
report.Show();
// 3 匯出成pdf
report.Prepare();
PDFExport export = new PDFExport();
report.Export(export, “result.pdf”);

report.Dispose();

[/c#]

Microsoft Drivers for PHP for SQL Server支援PHP7.0

記得之前提過XAMPP支援php連線SQL Server,當時只支援到5.6。但最近因為PHP7.0已釋出後,所以微軟也發佈了支援PHP7.0的4.0版本。
目前支援的版本如下:
Version 4.0 supports PHP 7.0+
Version 3.2 supports PHP 5.6, 5.5, and 5.4
Version 3.1 supports PHP 5.5 and 5.4
Version 3.0 supports PHP 5.4.

下載連結
https://www.microsoft.com/en-us/download/details.aspx?id=20098

模板引擎Twig~

Twig 是 Symfony 框架作者參考許多模板引擎後,自己所研發出來的模板引擎。優點是高效能、安全性、有著優良的物件導向結構……先記錄下來,改天來試玩。

 

模板引擎:Blade Mustache Smarty Twig Volt

Twig官方網站 http://twig.sensiolabs.org/

CodeIgniter 4 里程碑第一階段達成

2015年ci開發團隊宣佈了CodeIgniter4.0的開發藍圖後,2016/6/24在官方論壇宣布達成里程碑第一階段「CodeIgniter4.0.0-dev Reaches Milestone 1」。

依照藍圖的話就是完成下列的修正:

  • Autoloader
  • Dependency Injection
  • Logging
  • Exception Handling
  • HTTP Request/Response Layers (or Input/Output)
  • Routing
  • Controllers
  • Models
  • Database Layer
  • Config
  • Security

利用Cpanel API建立子網域

549400

因為租用虛擬主機時有cPanel後台,又因為太過於懶惰,不想進入程式設定。
幸好cPanel有提供API
下載Cpanel的XML-API.php

[php]
<?php require_once(‘./xmlapi.php’); $cpanelusr = ‘xxxx’; //您的cPanel帳號 $cpanelpass = ‘xxx’; //您的cPanel密碼 $domainroot = ‘xxxx.com.tw’; //網域名稱 $subdomain = ‘abc’; //建立的子網域名稱 $xmlapi = new xmlapi(‘localhost’); //ip or localhost $xmlapi->set_port( 2083 ); //建立port
$xmlapi->password_auth($cpanelusr,$cpanelpass);
$xmlapi->set_debug(0);
$xmlapi->api1_query($cpanelusr, ‘SubDomain’, ‘addsubdomain’, array($subdomain, $domainroot,0,0, "/public_html/{$subdomain}"));
echo ‘子網域建立成功’;
?>
[/php]

一直很喜歡它的主機服務。推給大家

遠振主機

網址:

https://host.com.tw

facebook寫自動貼文程式時access token權杖時效問題

1465550363703
在寫facebook的自動貼文或程式時,需要有access token,但access token的時效不長。該如何延長時間?
1
進入Graph API測試工具(https://developers.facebook.com/tools/explorer/)取得暫時性的權杖。
2
透過下列網址將APP_ID APP_SECRET ACCESS_TOKEN置換成對應的值

https://graph.facebook.com/oauth/access_token? client_id={APP_ID}& client_secret={APP_SECRET}& fb_exchange_token={SHORTLIVED_ACCESS_TOKEN}& grant_type=fb_exchange_token

3
如果還不行,可以利用Access Token Debugger工具(https://developers.facebook.com/tools/debug/access_token/),將暫時性的權杖輸入後,也可以取得長效(60天)的token。
那如何驗證過期與否重取得??官方給了做法
[php]
<?php
$app_id = "YOUR_APP_ID";
$app_secret = "YOUR_APP_SECRET";
$my_url = "YOUR_POST_LOGIN_URL";

// known valid access token stored in a database
$access_token = "YOUR_STORED_ACCESS_TOKEN";

$code = $_REQUEST["code"];

// If we get a code, it means that we have re-authed the user
//and can get a valid access_token.
if (isset($code)) {
$token_url="https://graph.facebook.com/oauth/access_token?client_id="
. $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret
. "&code=" . $code . "&display=popup";
$response = file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$access_token = $params[‘access_token’];
}

// Attempt to query the graph:
$graph_url = "https://graph.facebook.com/me?"
. "access_token=" . $access_token;
$response = curl_get_file_contents($graph_url);
$decoded_response = json_decode($response);

//Check for errors
if ($decoded_response->error) {
// check to see if this is an oAuth error:
if ($decoded_response->error->type== "OAuthException") {
// Retrieving a valid access token.
$dialog_url= "https://www.facebook.com/dialog/oauth?"
. "client_id=" . $app_id
. "&redirect_uri=" . urlencode($my_url);
echo("<script> top.location.href=’" . $dialog_url
. "'</script>");
}
else {
echo "other error has happened";
}
}
else {
// success
echo("success" . $decoded_response->name);
echo($access_token);
}

// note this wrapper function exists in order to circumvent PHP’s
//strict obeying of HTTP error codes. In this case, Facebook
//returns error code 400 which PHP obeys and wipes out
//the response.
function curl_get_file_contents($URL) {
$c = curl_init();
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_URL, $URL);
$contents = curl_exec($c);
$err = curl_getinfo($c,CURLINFO_HTTP_CODE);
curl_close($c);
if ($contents) return $contents;
else return FALSE;
}
?>
[/php]

參考:
https://developers.facebook.com/blog/post/2011/05/13/how-to–handle-expired-access-tokens/