Twitterに投稿 はてなブックマークに追加 Google Bookmarksに追加

目次 >> php

PHPのtips

ここでは、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]を使います。

ファイルをアップロードするには?

HTTP関係

HTTPヘッダを使って別のページにとばすには?

header関数を使い、Locationを送信します。

//同じディレクトリ上のsomewhere.htmlに飛びます
header("Location: ./somewhere.html");

クライアントのIPアドレスを取得する

$_SERVER["REMOTE_ADDR"]を使います。

JPEGファイルやテキストファイルをダウンロードさせるには?

通常、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関係

FTPで接続してファイルをアップロードするには?

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関数と使い方は一緒です。

画像処理

GDを使って画像データを生成するには?

Exifデータを取得するには?

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関数を使います。

phpのインストール

Fedoraの場合は、yum install phpでインストールする。

その他

コマンドラインからphpのバージョンを調べるには?

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

php5のインストール

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


最終更新日


本文中のFC4はFedora ProjectのFedora Core 4を、FC5はFedora Core 5を、FC6はFedora Core 6をopenSUSEはNovellのSUSE Linux OSSを表します。Fedora7以降は、単にFedora7、Fedora8、Fedora9、Fedora10、Fedora11、Fedora12、Fedora13、Fedora14、Fedora15と表示しています。Ubuntuは、必要に応じて20.04、21.04のようにバージョン番号をつけて区別しています。

ここに登場するドメイン名やIPアドレスなどはフィクションです。実在の人物・団体等とは一切関係がありません。
実際に使用する際は、各自の環境に合わせて書き換えてください。
もし何か間違いなどありましたらこちらからご連絡ください
リンクに許可は不要です。
Copyright (C) 2021 Chikuma Engineering Co., Ltd. All Rights Reserved.