PHPのコマンドライン引数(argv、argc そして getopt)

一般的な引数取得である、argvは簡単でお手軽ですが、複数の引数が全てオプション(任意指定)の場合、指定したい引数の順番まで全て指定する必要があり大変不便です。

そこで、getopt

マニュアルにもあるとおり、ショートタイプ(-dなど)、ロングタイプ(--dateなど)の両方が利用でき大変便利。
値でなく、キーが必須かどうかのチェックはしてくれないので自分で書く必要がありますが、ほとんどの場合、値のチェック(バリデーション)を行うので問題ない場合が多いかと。
さらにいい点としては、標準関数として定義されているのでクラスインスタンスの生成やinclude/require等別ファイルを読み込む必要がないところ。

PHPによるcurl(POST)リクエストの送信

PHPのcurlライブラリをPOSTで使用。

Yahoo検索は通常はブラウザからGETで結果を取得できますが、POSTでも取得できるのでこれでお試し。

#!/usr/bin/php
<?phpp
    //
    $URL = "http://search.yahoo.co.jp/search";
    $PRM = "p=test&ei=UTF-8";
    echo "*** [$URL]\n";

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $URL);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $PRM);
    //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);

    curl_exec($ch);

    curl_close($ch);

    print "\n";


で、結果。全部出すと多いのでBODYの始まりまでを抜粋。
user01@host01[php]$ ./curl_post.php | head -22
*** [http://search.yahoo.co.jp/search]
Content-type: text/html
HTTP/1.1 200 OK
Date: Mon, 06 Jun 2011 16:46:06 GMT
P3P: policyref="http://privacy.yahoo.co.jp/w3c/p3p.xml", CP="CAO DSP COR CUR ADM DEV TAI PSA PSD IVAi IVDi CONi TELo OTPi OUR DELi SAMi OTRi UNRi PUBi IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE GOV"
Vary: Accept-Encoding
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
Cache-Control: private

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"><title>Yahoo!検索 - test</title>
<meta http-equiv="Content-Script-Type" content="text/javascript">
<meta http-equiv="Content-Style-Type" content="text/css">
<link rel="stylesheet" href="http://k.yimg.jp/images/serp/ws/css/110412/ws20.css" type="text/css" media="screen,tv">
</head>
<body>

user01@host01[php]$
CURLOPT_HEADERは、HTML header出力の有無(Content-type: text/html~Cache-Control: privateまで)。
CURLOPT_SSL_VERIFYPEERは、sslのサーバ証明書チェックの有無。サーバのsslがオレオレ認証の場合は0を設定。但し今回は使わないのでコメント化。
CURLOPT_RETURNTRANSFERは、curl_exec() の戻り値を受け取る場合に設定($res = curl_exec())。


URLのファイルと異なるファイル名でダウンロード

例えば、http://foobar.com/test.php のようなURLから「ダウンロードファイル.csv」のようなファイル名でファイルをダウンロードする方法。

test.php
<?php
error_log ("*** new req");
$filename = mb_convert_encoding ('ダウンロードファイル.csv', 'SJIS');

header('Content-type: application/stream;');
header("Content-Disposition: attachment; filename=\"$filename\"");

readfile ("download.csv");
?>
download.csv
111,222
abc,def
このURLにアクセスすると、ブラウザのダウンロード用ダイアログがでます。
Windowsの場合は、SJISにしないとダイアログに表示されるファイル名が文字化けしてしまいます。

URL、ダウンロードするファイル名、ブラウザから保存されるファイル名、の全てを異なる名前で指定可能。

PHPによるメールの件名エンコード

メールの件名を日本語で送信する場合は、base64のエンコードを行う必要があるのでそのメモ。たまにやろうろすると忘れてしまう。。。

encode_subject.php
#!/usr/local/bin/php
<?php
$sbj_org = "件名のencodeテスト";
$sbj_enc = "=?iso-2022-jp?B?"
         . base64_encode (mb_convert_encoding ($sbj_org, "JIS", "UTF-8"))
         . "?="
         ;
print "$sbj_enc";

実行例
user01@host01[tool]$ ./encode_subject.php; echo ""
=?iso-2022-jp?B?GyRCN29MPiROGyhCZW5jb2RlGyRCJUYlOSVIGyhC?=

カテゴリ

Amazon

アクセスランキング

[ジャンルランキング]
コンピュータ
249位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
38位
アクセスランキングを見る>>

RSSリンクの表示

ブロとも申請フォーム

Copyright © nopgm