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

2017年12月7日 星期四

安裝 laravel 的方法



如果只是想裝最新的版本,可以使用 laravel 指令

首先使用 composer 下載 laravel installer

composer global  require "laravel/installer"

在不同的作業系統中,laravel install 會被放到不同的目錄下,例如

[Win7]
[使用者目錄]\AppData\Roaming\Composer\
[ubuntu]
~/.composer/
[CentOS]
~/.config/composer/

將下載後的 laravel 指令位置加到 path 變數中,然後執行以下指令

laravel new [專案名稱]


如果想裝舊版的 laravel ,則必須使用 composer 來指定 laravel 版本號碼,例如以下的指令是要安裝 laravel 5.3

composer create-project laravel/laravel  [專案名稱] 5.3

2015年5月24日 星期日

pChart 的使用方法整理(五)進階長條圖(Bar Chart)

進階的長條圖 與基礎長條圖有以下不同

1、數據由 1 組變為 2 組
2、設定橫座標名稱
3、加入背景色,讓預設為白色的格線顯示
4、加上標題
5、加上圖例說明
6、指定刻度的最大及最小值



程式碼如下:
// 引用相關類別檔
include("class/pDraw.class.php");
include("class/pImage.class.php");
include("class/pData.class.php");

// 建立資料集物件
$myData = new pData();

// 在資料集中新增資料
// 設定第1個縱座標(Y軸)的資列數列
$myData->addPoints(array(150,220,300,250,420), "台北");
// 設定第2個縱座標(Y軸)的資列數列 -- New-1
$myData->addPoints(array(250,210,500,150,320), "高雄");
// 設定縱座標(Y軸)的名稱
$myData->setAxisName(0,"雨量");
// 新增一筆資料數列,並命名為 Months
$myData->addPoints(array("一月","二月","三月","四月","五月"),"Months");
// 將 Months 設定為橫座標
$myData->setAbscissa("Months");
// 設定橫座標名稱 -- New-2
$myData->setAbscissaName("月份");

// 建立一個圖形物件,設立它的尺寸及相關的資料集
$myPicture = new pImage(600,400,$myData);

// 指定圖形中使用的字型和字體大小
$myPicture->setFontProperties(array("FontName"=>"fonts/NotoSansCJKtc-Regular.otf","FontSize"=>12));

// 加上背景色,讓預設的白色格線顯示 -- New-3
$backgroundSettings = array("R"=>120, "G"=>133, "B"=>63);
$myPicture->drawFilledRectangle(0,0,600,400,$backgroundSettings);

// 畫出圖表的外框
$myPicture->drawRectangle(0,0,599,399,array("R"=>0,"G"=>0,"B"=>0));

// 設定圖表在圖形中的位置
$myPicture->setGraphArea(60,80,550,330);

// 加上標題 -- New-4
$myPicture->drawText(280,55,"累計雨量統計圖",array("FontSize"=>20,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));

// 加上圖例說明 -- New-5
$myPicture->drawLegend(400,60,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL));

// 畫出刻度,並設定刻度的最大及最小值 -- New-6
$axisBoundaries = array(0=>array("Min"=>0,"Max"=>550));
$scaleSettings  = array("Mode"=>SCALE_MODE_MANUAL,"ManualScale"=>$axisBoundaries);
$myPicture->drawScale($scaleSettings);

// 設定長條圖的相關設定,在這個例子中,是顯示數值
$settings = array("DisplayValues"=>TRUE);

// 畫出長條圖
$myPicture->drawBarChart($settings);

// 如果我們要將生成的 png 存檔,可以用以下的方式;如果只想單純顯示,此行可省略
$myPicture->render('example_05.png');

// 將圖形輸出到瀏覽器
$myPicture->autoOutput();





相關連結:

2015年5月22日 星期五

pChart 的使用方法整理(四)簡單圓餅圖(Pie Chart)

在這裏以一個簡單的例子說明如何用 pChart 產生圓餅圖,並且在圖片的上面列出這張圖的標題。


程式碼如下:

// 引用相關類別檔
include("class/pDraw.class.php");
include("class/pImage.class.php");
include("class/pData.class.php");

// 使用圓餅圖需要引入這個類別檔
include("class/pPie.class.php");

// 建立資料集物件
$myData = new pData();

// 在資料集中新增資料
// 設定資列數列
$myData->addPoints(array(550,320,300,150,120));
// 新增一筆資料數列,並命名為 Area
$myData->addPoints(array("北部","中部", "南部", "東部", "離島"), "Area");
// 將 Area 設定為橫座標
$myData->setAbscissa("Area");

// 建立一個圖形物件,設立它的尺寸及相關的資料集
$myPicture = new pImage(400,400,$myData);

// 指定圖形中使用的字型和字體大小
$myPicture->setFontProperties(array("FontName"=>"fonts/NotoSansCJKtc-Regular.otf","FontSize"=>12));

// 畫出圖表的外框
$myPicture->drawRectangle(0,0,399,399);

// 畫出圖表的標題區域
$RectangleSettings = array("R"=>0,"G"=>0,"B"=>0);
$myPicture->drawFilledRectangle(0,0,400,25,$RectangleSettings);

// 寫出圖表的標題
$myPicture->drawText(150,22,"區域分布圖",array("R"=>255,"G"=>255,"B"=>255));

$PieChart = new pPie($myPicture,$myData);

// 設定圓餅圖在圖形中的位置及設定
$settings = array(
    "Radius"=>120, // 圓餅圖半徑
    "Border" => TRUE, // 區塊的框線
    "DrawLabels"=>TRUE, // 畫出標籤
    "WriteValues" => true, // 標示數值
    "ValuePosition" => PIE_VALUE_INSIDE, // 數值的位置
    );
$PieChart->draw2DPie(200,200, $settings);


// 如果我們要將生成的 png 存檔,可以用以下的方式;如果只想單純顯示,此行可省略
$myPicture->render('example_04.png');

// 將圖形輸出到瀏覽器
$myPicture->autoOutput();




相關連結:

pChart 的使用方法整理(三)使用中文字型

我們所下載下來的 pChart 函式庫,並沒有包含中文字型;所以當我們要在圖表中顯示中文字,就會出現空白或是方塊。

預設的英文字型有下列9種,字型檔位於 fonts/ 目錄下:



解決的方法自然是下載中文字型,但是一般的中文字型通常是要付費購買的,如果你有購買中文字型,可以直接把想要使用的字型檔複製到 pChart 函式庫裏的 fonts/ 目錄下,跟預設的其他字型放在一起。

如果沒有購買中文字型,可以考慮 Open Source 的中文字型,詳情請參考此連結

我是到 Google 下載中文字型(Google的下載連結)

下載後解壓縮,裏面有8個檔案,1個是授權說明,7個是字型檔,字型檔如下:
NotoSansCJKtc-Thin.otf
NotoSansCJKtc-Light.otf
NotoSansCJKtc-DemiLight.otf
NotoSansCJKtc-Medium.otf
NotoSansCJKtc-Regular.otf
NotoSansCJKtc-Bold.otf
NotoSansCJKtc-Black.otf
將這7個檔案複製到 fonts/ 目錄下,就可以在程式裏使用中文字型。

程式碼如下:
// 指定圖形中使用的中文字型和字體大小(24)
$myPicture->setFontProperties(array("FontName"=>"fonts/NotoSansCJKtc-Regular.otf","FontSize"=>24));


字型範例:


相關連結:

pChart 的使用方法整理(二)簡單長條圖(Bar Chart)

另一種比較常用的圖是長條圖(Bar Chart),下面以一個最簡單的長條圖為例



程式碼如下:

// 引用相關類別檔
include("class/pDraw.class.php");
include("class/pImage.class.php");
include("class/pData.class.php");

// 建立資料集物件
$myData = new pData();

// 在資料集中新增資料
// 設定縱座標(Y軸)的資列數列
$myData->addPoints(array(150,220,300,250,420));
// 設定縱座標(Y軸)的名稱
$myData->setAxisName(0,"Hits");
// 新增一筆資料數列,並命名為 Months
$myData->addPoints(array("January","February","March","April","May"),"Months");
// 將 Months 設定為橫座標
$myData->setAbscissa("Months");


// 建立一個圖形物件,設立它的尺寸及相關的資料集
$myPicture = new pImage(600,400,$myData);

// 指定圖形中使用的字型和字體大小
$myPicture->setFontProperties(array("FontName"=>"fonts/Forgotte.ttf","FontSize"=>12));

// 畫出圖表的外框
$myPicture->drawRectangle(0,0,599,399,array("R"=>0,"G"=>0,"B"=>0));

// 設定圖表在圖形中的位置
$myPicture->setGraphArea(60,40,550,360);

// 畫出刻度,刻度會由資料的大小自動決定
$myPicture->drawScale();

// 設定長條圖的相關設定,在這個例子中,是顯示數值
$settings = array("DisplayValues"=>TRUE);

// 畫出長條圖
$myPicture->drawBarChart($settings);

// 如果我們要將生成的 png 存檔,可以用以下的方式;如果只想單純顯示,此行可省略
$myPicture->render('example_02.png');

// 將圖形輸出到瀏覽器
$myPicture->autoOutput();


使用到這裏,你可能會發現沒辦法在圖表中使用中文字型,在下一篇文章中,我會整理如何在圖表中使用中文字型的方法。

相關連結:

2015年5月16日 星期六

pChart 的使用方法整理(一)簡單曲線圖


下載 pChart 函式庫

官方下載點

pChart 在 2014-01-19 發行了新的版本 pChart2.1.4,使用方式和之前的版本略有不同

我們以一張簡單的曲線圖為例



圖檔的尺寸為 800 x 300
折線圖的大小為 700 x 240,在圖形裏的位置: x1=60, y1=40, x2=760, y2=280

程式碼如下
// 引用相關類別檔
include("class/pDraw.class.php");
include("class/pImage.class.php");
include("class/pData.class.php");

// 建立資料集物件
$myData = new pData();

// 在資料集中新增資料
$myData->addPoints(array(1, 2, 1,3,4,3,5));

// 建立一個圖形物件,設立它的尺寸及相關的資料集
$myPicture = new pImage(800,300,$myData);

// 指定圖形中使用的字型和字體大小
$myPicture->setFontProperties(array("FontName"=>"fonts/Forgotte.ttf","FontSize"=>12));

// 設定圖表在圖形中的位置
$myPicture->setGraphArea(60,40,760,280);

// 畫出刻度,刻度會由資料的大小自動決定
$myPicture->drawScale();

// 畫出曲線圖
$myPicture->drawSplineChart();

// 如果我們要將生成的 png 存檔,可以用以下的方式;如果只想單純顯示,此行可省略
$myPicture->render('example_01.png');

// 將圖形輸出到瀏覽器
$myPicture->autoOutput();

這樣就可以產生一個簡單的曲線圖

參考資料:

1、pChart 官方網站
http://www.pchart.net/


相關連結:

2015年4月20日 星期一

PHPWord 的使用方法整理(一)最基本的使用方式

一、從 GitHub 下載函式庫的壓縮檔( PHPWord-master.zip),下載連結如下:
https://github.com/PHPOffice/PHPWord/archive/master.zip

二、解壓縮後,主要的目錄結構如下
docs/    說明文件
samples/     範例程式
src/    主要的函式庫程式碼
tests/    測試資料夾
將 src/ 下的 PhpWord 這一個目錄,整個複製到你存放函式庫的地方,我用的是 XOOPS,所以我把他放到 xoops_lib/Frameworks/ 下面

三、再來就是一個簡單的產生 Word 案的程式碼

// 因為我用的是 XOOPS 所以要引入 header.php ,才能用一些常數 // 如果你不是用 XOOPS ,下面的這一行就不一定要有 include "header.php"; // 因為 XOOPS 有定義好 XOOPS_PATH 這個路徑常數,如果沒有的話,你得改一下這一行 require_once XOOPS_PATH.'/Frameworks/PhpWord/Autoloader.php'; \PhpOffice\PhpWord\Autoloader::register(); $phpWord = new \PhpOffice\PhpWord\PhpWord(); // 新增一個段落 $section = $phpWord->addSection(); // 在段落裏增加內容 $section->addText(htmlspecialchars('這是一個測試的文字段落')); // 在這裏我要把他直接輸出到瀏覽器裏,讓你可以直接下載,檔名叫 phpword_01.docx header('Content-Type: application/vnd.ms-word'); header('Content-Disposition: attachment;filename="phpword_01.docx"'); header('Cache-Control: max-age=0'); $objWriter = \PhpOffice\PhpWord\IOFactory::createWriter($phpWord, 'Word2007'); $objWriter->save('php://output'); // 如果你要直接生成 word 檔,請將上面這一行改為下面這一行即可 // $objWriter->save('phpword_01.docx'); // 一定要有 exit() exit();





參考資料:
1、PHPWord in GitHub
https://github.com/PHPOffice/PHPWord

2、PHPWord Document
http://phpword.readthedocs.org/en/latest/index.html



2014年11月14日 星期五

PHPExcel 的使用方式整理(一)最簡單的程式範例


PHPExcel 的官網( phpexcel.codeplex.com ) 下載原始碼後,可以看到裏面有 3個目錄: Classes, Documentation, Examples ,如果只是單純要使用的話,只需要 Classes 目錄就好。


如果我們想要產生一個這樣的 Excel 檔案(格式為 Excel97-2003),檔名為 test_01.xls,從瀏覽器裏下載下來





我們得這麼做


假設我們把程式碼放在跟 Classes 同一層,這樣的話,我們在引入程式碼時,就比較簡單

// 檔案名稱:phpexcel_example_01.php

// 引入 PHPExcel 函式庫
include_once "Classes/PHPExcel.php";

//接著我們要生成一個 PHPExcel 物件來幫忙我們處理 Excel 檔案
$objPHPExcel = new PHPExcel();

// 將活頁簿裏的第一張工作表設為要操作的工作表
$objPHPExcel->setActiveSheetIndex(0);

// 取得工作表物件
$objWorksheet = $objPHPExcel->getActiveSheet();


// 將值填入儲存格中
$objWorksheet->setCellValue("A1","姓名");
$objWorksheet->setCellValue("B1","成績");
$objWorksheet->setCellValue("A2","王小明");
$objWorksheet->setCellValue("B2","85");
$objWorksheet->setCellValue("A3","張小志");
$objWorksheet->setCellValue("B3","90");
$objWorksheet->setCellValue("A4","陳小祥");
$objWorksheet->setCellValue("B4","88");

// 輸出 header
header("Content-Type: application/vnd.ms-excel");
header("Content-Disposition: attachment;filename=test_01.xls");
header("Cache-Control: max-age=0");

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('php://output');

這樣在網址列中輸入你的 url(例如:http:/kirin.idv.tw/PHPExcel/phpexcel_example_01.php) ,就可以下載 test_01.xls 這個 Excel 檔案了

參考資料:
一、PHPExcel developer documentation 開發人員手冊



2014年7月9日 星期三

jQuery plugin: jQuery-File-Upload 多檔案上傳(二)陽春款(Essential Version)

陽春款(Essential Version)其實是我從作者網站上的基本款(Basic Version)修改而來的,作者的 Basic Version 寫的很好,但是他有用到 Bootstrap 這個 Framework,所以看起來就比較複雜一點。

我把一些用不到的HTML code 去除後,留下比較陽春的功能,在學習這個 plugin 時,會比較容易上手。

和 Basic Version 相比較,Essentail Version 的功能如下:
1、多檔案上傳
2、支援 Drag and Drop
3、進度條 (Basic Version 才有)
4、跨網域上傳 (Basic Version 才有)
5、可恢復的檔案傳輸 (Basic Version 才有)
6、支援 PHP, Python, Ruby on Rails , Java, Node.js, Go ...等伺服器端語言

準備工作:

Basic Version 會用到的伺服器端(PHP)相關的檔案結構如下:

js/  (請將下載下來的原始碼中,js 目錄下的所有檔案複製到這個目錄下)
files/ (檔案上傳後的存放目錄,請將其權限設為可讀寫)
UploadHandler.php  (請參考前一篇的內容)
upload_process.php  (請參考前一篇的內容)


Basic Version 會用到的 Client端 HTML 檔案(essential.html)內容如下:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>多檔案上傳範例 - 陽春款</title>
</head>
<body>
<div class="container">
    <h1>多檔上傳範例 -- 陽春款</h1>
    <h2 class="lead">Essential Version</h2>
    <br>
        <input id="fileupload" type="file" name="files[]" multiple>
    <br>
    <br>
    <!-- 上傳成功後會在此區顯示檔名 -->
    <div id="uploaded-files" class="uploaded-files"></div>
    <br>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<!-- 如果你已經使用了 jQuery UI, 就不用再導入 jquery.ui.widget.js -->
<script src="js/vendor/jquery.ui.widget.js"></script>
<script src="js/jquery.fileupload.js"></script>
<script>
$(function () {
    'use strict';
    // 將 url 這個變數改成你的伺服器端處理程式
    var url = 'upload_process.php';
    $('#fileupload').fileupload({
        url: url,
        dataType: 'json',
        done: function (e, data) {
            $.each(data.result.files, function (index, file) {
                $('<p/>').text(file.name).appendTo('#uploaded-files');
            });
        }
    });
});
</script>
</body>
</html>


跟之前最大的不同處,是在於範例一是用表單將 file 的資料傳給處理程式(upload_process.php),但是這個範例是利用 jQuery File Upload 這個 plugin ,將 file 這個表單元件的資料一個一個傳給處理程式(upload_process.php),然後再利用其json格式的傳回值,將上傳完成的檔案名稱顯示在畫面上。

操作步驟:


1、請先用瀏覽器(例:Chrome)打開 essential.html,然後按下「選擇檔案」的按鈕;或是直接將檔案拖曳至「選擇檔案」的按鈕上。


2、拿 Win7 裏的範例圖片(Koala.jpg)來測試



3、就可以看到畫面上顯示出 Koala.jpg 的檔名。




相關文件:

jQuery plugin: jQuery-File-Upload 多檔案上傳(一)使用前的熱身


參考資料:

1、jQuery File Upload Demo -- Basic
http://blueimp.github.io/jQuery-File-Upload/basic.html








2014年7月3日 星期四

jQuery plugin: jQuery-File-Upload 多檔案上傳(一)使用前的熱身

在網路上找了幾個可以多檔案上傳的函式庫,後來決定用這個 jQuery 外掛,原因如下:

1、配合 jQuery 使用十分方便

2、功能強大

3、說明文件完整


作者很貼心的連伺服器端(Server-side)的程式碼都準備好了

使用前請先到 https://github.com/blueimp/jQuery-File-Upload ,按下右下角的「Download ZIP」來下載壓縮好的程式碼




準備工作

1、Server端(以 PHP 為例)

下載後,在 server/php/ 目錄下,有2個檔案是必須的

UploadHandler.php -- 處理上傳的類別檔。
index.php -- 用來處理上傳的主要程式,也就是 Form action 的目標;在這裏先把它改名為 upload_process.php 以方便辨識。

UploadHandler.phpupload_process.php 複製到網頁的目錄下,然後我們看一下裏面的內容。

沒錯!不用懷疑!! upload_process.php (就是原來的 server/php/index.php) 裏面的內容就只有

error_reporting(E_ALL | E_STRICT);

require('UploadHandler.php');

$upload_handler = new UploadHandler();


upload_process.php 程式預設會接受以 POST method 傳送來的檔案資料,然後以上傳檔名儲存在程式所在位置的 files 目錄下。

所以請先在程式所在目錄建立一個 files 目錄,並將其權限設為「可讀寫」

2、Client 端( HTML )

請先建立一個有檔案上傳表單的 HTML 文件,檔名為 upload_form.html,範例如下:

<html>
<head>
<meta charset="utf-8">
</head>
<body>
<br><br>
<form method='POST' action='upload_process.php' enctype='multipart/form-data'>
<input type='file' name='files[]' multiple>
<input type='submit' value='Submit'>
</form>
</body>
</html>



操作步驟

1、請先用瀏覽器(例:Chrome)打開 upload_form.html,然後按下「選擇檔案」的按鈕。

2、拿 Win7 裏的範例圖片--無尾熊( Koala.jpg) 來測試上傳

3、選好後按下「Submit」按鈕

4、如果看到以下畫面(有上傳的檔名及檔案大小),就表示上傳成功
如果看到以下畫面(檔案大小為 false,並有 error 訊息),就表示上傳失敗,要再檢查一下那裏有問題

我這裏發生這個問題的原因是預設的上傳目錄(files)不存在或是無寫入權限;把目錄建立並設好權限就ok了。


Server 端傳回的格式是 json,這些資料在以後我們在設定更方便的 UI 時會用到,這裏就先參考一下就好。



參考資料

1、Demo 站
http://blueimp.github.io/jQuery-File-Upload/

2、原始碼@GitHub
https://github.com/blueimp/jQuery-File-Upload

2014年6月27日 星期五

PHP: 中文正規表示式(RE, Regular Expression)


在php裏,中文的正規表示式通常是用  mb_ereg() 及 mb_ereg_replace() 來完成,我也有在網路上找到用 perg_match() 和 preg_replace() 來完成中文的操作,但是那個有如天書一般的過程,實在很難讓人理解。

在使用正規表示式之前,必需先設定使用的字元編碼,以utf-8為例,必須先執行以下2個函數,字串的操作才會正常

mb_internal_encoding("UTF-8");
mb_regex_encoding("UTF-8");

函式說明:

int mb_ereg ( string $pattern , string $string [, array $regs ] )

Executes the regular expression match with multibyte support.
用來找到字串中的特定pattern

string mb_ereg_replace ( string $pattern , string $replacement , string $string [, string$option = "msr" ] )

Replace regular expression with multibyte support.
Scans string for matches to pattern, then replaces the matched text with replacement
用來對字串的內容做修改



使用範例:

1、要將字所包含的資料依分副符號分離開來

例:國土建字第1020000142號-0424-1020508A+0509C+0523A+0517B+0517C+0614B-紙本公文-1488

這個檔名字串主要是用 - 當做分隔符號來分隔不同的資訊
mb_ereg('([\w\.]+)-([0-9]+)-(.*)', $filename, $aryData);
$code = $aryData[1]; // 文號
$d = $aryData[2];  // 發文日期
$info = $aryData[3];  // 其他資訊

2、從中文字串中取得數字的部份

例:文號為「國土建字第1020000142號」,要從文號中取得發文的年度,也就是數字的前3碼

mb_ereg('([0-9.]+)', $code, $aryData);
if($debug) echo "sn: ".$aryData[0]."\n"; // 0表示符合pattern 的所有字串
$cht_year = substr($aryData[0], 0, 3);
if($debug) echo "民國 ".$cht_year." 年\n";
$year = 1911 + intval($cht_year);
if($debug) echo "西元 ".$year." 年\n";

3、去除字串中的所有空白

mb_ereg_replace("/\s/", "", $string);

WildCard
\w : 字元
\s : 空白


注意事項:

1、ereg開頭的函數在PHP5.3之前會 Deprecated ,建議用 preg 取代;mb_ereg 開頭的函式不受影響。


參考資料:

1、鳥哥的 Linux 私房菜 第十二章、正規表示法與文件格式化處理http://linux.vbird.org/linux_basic/0330regularex.php

2、http://atedev.wordpress.com/2007/11/23/%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%A4%BA%E5%BC%8F-regular-expression/

2011年1月18日 星期二

cURL in PHP

在PHP裏,如果要送出 post 資料,通常要按下按鈕,但是,如果想要讓程式自動送出post資料,並取得回應,就要透 curl 這組函數來達成。
以下的範例是透過curl函數來取得遠端主機的資料,並存成檔案

$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, “first_name=”.$N1.”&second_name=”.$N2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_COOKIEFILE, “/tmp/”.$temp_wav);
curl_setopt($ch, CURLOPT_URL,”網址”);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$result = curl_exec ($ch);
$fp = fopen (”/tmp/test.txt”, “w”) or die(”Unable to open stdout for writing.\n”);
fwrite($fp, $result);
fclose($fp);
curl_close ($ch);
chmod(”/tmp/test.txt”, 0777);
如果沒有curl函數,表示在compile時,沒加入此一選項,請重新compile php,或是安裝相對應該 php rpm

PHP讀取EXCEL檔案

在程式裏新增資料時,我們通常是提供表單來讓使用者填寫,但是有時是大量或是多筆的資料要建立,所以我們通常會提供一個匯入的功能,讓使 用者能將他們所建立的資料檔匯入。使用者最常使用的是 excel 檔,但是php內建只有提供 csv 檔的解析,所以我們就得跟使用者解釋如何把 excel 存成 csv ,這個有時挺有難度的。
經過了重重的打擊,我決來好好找一個工具,看能不能直接解析 excel 檔。
透過 google 我找到了 phpExcelReader 這個專案
下載後,在使用上有一些問題
Q1、直接執行後,會有以下的錯誤:
Warning: require_once(Spreadsheet/Excel/Reader/OLERead.php) [function.require-once]: failed to open stream: No such file or directory in /home/xxxxx/public_html/test/phpExcelReader/Excel/reader.php on line 31
Fatal error: require_once() [function.require]: Failed opening required ‘Spreadsheet/Excel/Reader/OLERead.php’ (include_path=’.:/usr/lib/php:/usr/local/lib/php’) in /home/xxxxx/public_html/test/phpExcelReader/Excel/reader.php on line 31
解決的方式如下:
編輯 Excel/reader.php 這個檔,把 31行的 require_once ‘Spreadsheet/Excel/Reader/OLERead.php’; 改成 require_once ‘Excel/oleread.inc’;
Q2、接著出現以下錯誤訊息:
Fatal error: Out of memory (allocated 46137344) (tried to allocate 45613057 bytes) in /home/kirin/public_html/test/phpExcelReader/Excel/oleread.inc on line 172
解決的方法:
這是因為他附的excel範例檔怪怪的,你上傳自己的excel檔,然後在 example.php 裏,找到$data->read(’jxlrwtest.xls’); 這一行,把 jxlrwtest.xls 改成你上傳的檔案,就可以正常顯示了。
Q3、然後,我發現中文沒辦法正常顯示
解決方法:
在 example.php 裏的第12行 $data->setOutputEncoding(’CP1251′);,把CP1251 改成 UTF-8 就可以正常秀出中文了
然後,似乎就一切正常了。
這裏是我修改後的檔案,我打包成 tar ball,有需要的人請享用
phpexcelreader
●參考資料
1、http://sourceforge.net/projects/phpexcelreader
2、http://www.xml.lt/Blog/2007/12/14/Reading+Excel+files+with+PHP
3、http://blog.roodo.com/jaceju/archives/4654041.html
4、http://vrypan.net/log/2004/11/10/parsing-xls-files-with-php/

用curl透過ftp下載資料

在一般的linux server 上,我都是使用 ncftp 這個工具程式透過 crontab 自動下載備份資料。
但是在很多虛擬主機和NAS上,並沒有ncftp,但是有時可以找到 curl 這個程式,所以我只好改用這程式。
curl 主要是用來透過http下載網頁資料的,但是也可以使用 ftp協定
我的指令如下
curl -O -u 帳號:密碼 ftp://FTP檔案完整路徑
-O 表示存成遠端檔案的名字
也可以使用 -o 指令指定要存成的檔案名字,例如
curl -o 目標檔名 -u 帳號:密碼 ftp://FTP檔案完整路徑
我在NAS上測試的時候,還出現了「(23) Failed writing body」,這個錯誤,我在網上找到會出現這個訊息的2個可能
1、所使用的檔名是該系統上不允許的
2、空間不足
原來我的工作目錄是在NAS的 ramdisk 上,空間只剩下2.8M,所以下載沒多久就出現這個錯誤訊息了,後來把工作目錄移到硬碟上就ok了
●參考資料
1、cURL Manual

Zend Framework 學習資源

[PHP-ZF] 如何學習 Zend Framework

http://www.jaceju.net/blog/archives/324