
目次 >> php
ここでは、PHP(Hypertext Preprocessor)関係のtipsを記述する。
mail関数を使います。
mail関数は宛先、題名、メッセージの本体、ヘッダを指定できます。Fromは直接は指定できないので、ヘッダに入れてやります。
$to = "toaddress@example.com" ; $subject = "subject is here"; $headers = "From: fromaddress@example.com\r\nContent-Type: text/plain; charset=\"UTF-8\"\r\n"; $message = "Hello!"; mail($to, $subject, $message,$headers);
charset=\"UTF-8\"の部分は、phpのコードがUTF-8で書かれている場合です。これをつけておかないと、メーラーはデフォルトでUTF-8と仮定していることはほとんどないので、日本語を送ると文字化けします。別の方法としては、メッセージ内容をISO-2022-JPなどに変換してから送る方法もあります。
クッキーの値を読み出すには$_COOKIE['hogehoge']を使います。
//クッキーにhogehogeという名前で保存された値を読み出す $hoge = $_COOKIE['hogehoge'];
クッキーに保存するにはsetcookie関数を使います。
setcookieはすべての出力の前に行う必要がある。
//$hogeの内容をhogehogeという名前で保存。有効期限は現在の時刻から1週間後
setcookie("hogehoge", $hoge, time() + 3600*24*7);
$_POST[name]を使います。
header関数を使い、Locationを送信します。
//同じディレクトリ上のsomewhere.htmlに飛びます
header("Location: ./somewhere.html");
$_SERVER["REMOTE_ADDR"]を使います。
通常、JPEGファイルやテキストファイルは、単純にリンクすると、ブラウザで表示されます。
これを、ブラウザで表示させずに、ダウンロードダイアログボックスを表示させるようにするには次のようにします。
<?php
header("Content-type: image/jpeg");
header("Content-Disposition: attachment; filename=hogehoge.jpg");
header("Content-length: " . filesize("./TEST.JPG"));
readfile("./TEST.JPG");
?>
hogehoge.jpgがブラウザに渡される名前で、ファイルをセーブする際のデフォルトの名前として使われます。
一方、TEST.JPGは実際にサーバにあるファイルで、ダウンロードされるファイルの中身はこのファイルになります。
テキストファイルも同様に、
<?php
header("Content-type: text/plain");
header("Content-Disposition: attachment; filename=hogehoge.txt");
header("Content-length: " . filesize("./TEST.TXT"));
readfile("./TEST.TXT");
?>
とします。
なお、ダウンロードではなく、ブラウザで表示させる場合は、Content-Dispositionの部分のattachmentをinlineに変えると出来ます。
<?php
header("Content-type: image/jpeg");
header("Content-Disposition: inline; filename=hogehoge.jpg");
header("Content-length: " . filesize("./TEST.JPG"));
readfile("./TEST.JPG");
?>
<?php
header("Content-type: text/plain");
header("Content-Disposition: inline; filename=hogehoge.txt");
header("Content-length: " . filesize("./TEST.TXT"));
readfile("./TEST.TXT");
?>
ftp_put関数を使います。
ftp_loginでログインした後、ftp_putでアップロードします。
//FTPサーバに接続します
$ffp = ftp_connect("ftp.example.com");
//パスワードとユーザー名を使ってログインします。
ftp_login($ffp, "username", "password");
//ログインが成功したなら、処理を継続
if ($ffp)
{
// ファイルをアップロード
$upload = ftp_put($ffp, "destination.txt", "source.txt", FTP_ASCII);
}
//FTP処理を終了します
ftp_quit($ffp);
date関数を使います。
time関数は、1970年1月1日 00:00:00 GMTからの通算秒数しか入っていないので、dateを使ってフォーマットをしてやる必要があります。
//ローカルの年月日、及び時刻を取得する
date("Y/m/d H:i:s");
フォーマットなどの詳しい情報は、マニュアルを参照のこと
gmdate関数を使います。
グリニッジ標準時になる以外は、date関数と使い方は一緒です。
exif_read_data関数を使います。
flock関数を使います。
ロックは、ファイルがfcloseでクローズされた場合、あるいは、スクリプトが終了した場合に、解除されます。
$fp = fopen ("filename.txt","a");
flock($fp, LOCK_EX);
readdir関数を使います。
if ($handle = opendir("./somedir/"))
{
while (false !== ($file = readdir($handle)))
{
//ここで書くファイルに対する処理を行う
}
closedir($handle);
}
$fp = fopen($logfile, "w");
flock($fp, 2);
fputs($fp, implode('',$new_log));
fclose($fp);
mkdirを使います。
mkdir ("/path/to/my/dir", 0700);
chmod関数を使います。
Fedoraの場合は、yum install phpでインストールする。
# yum install php
Loaded plugins: refresh-packagekit
Setting up Install Process
Parsing package install arguments
Resolving Dependencies
--> Running transaction check
---> Package php.x86_64 0:5.2.6-5 set to be updated
--> Processing Dependency: php-common = 5.2.6-5 for package: php
--> Processing Dependency: php-cli = 5.2.6-5 for package: php
--> Running transaction check
---> Package php-common.x86_64 0:5.2.6-5 set to be updated
---> Package php-cli.x86_64 0:5.2.6-5 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
php x86_64 5.2.6-5 fedora 1.2 M
Installing for dependencies:
php-cli x86_64 5.2.6-5 fedora 2.3 M
php-common x86_64 5.2.6-5 fedora 230 k
Transaction Summary
================================================================================
Install 3 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 3.8 M
Is this ok [y/N]: y
Downloading Packages:
(1/3): php-common-5.2.6-5.x86_64.rpm | 230 kB 00:02
(2/3): php-5.2.6-5.x86_64.rpm | 1.2 MB 00:17
(3/3): php-cli-5.2.6-5.x86_64.rpm | 2.3 MB 00:25
--------------------------------------------------------------------------------
Total 83 kB/s | 3.8 MB 00:46
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : php-common 1/3
Installing : php-cli 2/3
Installing : php 3/3
Installed:
php.x86_64 0:5.2.6-5
Dependency Installed:
php-cli.x86_64 0:5.2.6-5 php-common.x86_64 0:5.2.6-5
Complete!
php -vで調べられる。
$ php -v
PHP 5.2.6 (cli) (built: Sep 13 2008 11:13:28)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
OS:fedora
もともとは
$ php -v
PHP 4.3.4 (cgi) (built: Apr 7 2004 09:43:47)
Copyright (c) 1997-2003 The PHP Group
Zend Engine v1.3.0, Copyright (c) 1998-2003 Zend Technologies
まずはソースのダウンロード(http://www.php.net/downloads.php)
$ ./configure
$ make
# make install
で完了
ログインし直してphp -vを打ってみると
標準では
$ php -v
PHP 5.0.4 (cgi) (built: Apr 6 2005 05:37:21)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v2.0.4-dev, Copyright (c) 1998-2004 Zend Technologies
となるはず。
ubuntuの場合は、もしphpがインストールされていない場合は、phpとタイプすると、
$ php
The program 'php' is currently not installed. You can install it by typing:
sudo apt-get install php5-cli
-bash: php: command not found
このようなメッセージが出てくるはずである。これに従い、apt-get install php5-cliでインストールする。
$ sudo apt-get install php5-cli
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Couldn't find package php5-cl
satod@ubu:~$ sudo apt-get install php5-cli
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
php5-common
Suggested packages:
php-pear
The following NEW packages will be installed:
php5-cli php5-common
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 2957kB of archives.
After this operation, 6734kB of additional disk space will be used.
Do you want to continue [Y/n]? y
Get:1 http://us.archive.ubuntu.com hardy-updates/main php5-common 5.2.4-2ubuntu5.1 [317kB]
Get:2 http://us.archive.ubuntu.com hardy-updates/main php5-cli 5.2.4-2ubuntu5.1 [2640kB]
Fetched 2957kB in 9s (323kB/s)
Selecting previously deselected package php5-common.
(Reading database ... 118480 files and directories currently installed.)
Unpacking php5-common (from .../php5-common_5.2.4-2ubuntu5.1_amd64.deb) ...
Selecting previously deselected package php5-cli.
Unpacking php5-cli (from .../php5-cli_5.2.4-2ubuntu5.1_amd64.deb) ...
Setting up php5-common (5.2.4-2ubuntu5.1) ...
Setting up php5-cli (5.2.4-2ubuntu5.1) ...
Creating config file /etc/php5/cli/php.ini with new version