PHP

Twitter API v1からv1.1への変更方法

弊社で、PHPで「OAuth認証」でTwitterに投稿出来るようにプログラムを組んでいるのですが

一昨日、Twitterの仕様が変わり、APIもv1からv1.1に変更され、今までニュースやトピックスの投稿時にTwitterにも自動で投稿できていたのが出来なくなりました。

色々、ネット上を探したのですが、中々見つからなく、Twitter公式の英文を確認しつつ設定変更しました。そのメモ。

 

PHPでは、僕の方で行っているのは投稿のみですので、他の機能を使われている方はにも対応出来ないです。

 

結構、Twitter自体機能も変わったので、APIも相当変更しないと駄目だと思っていたのですが1カ所でした。

まずは、OAuthを利用しているv1が前提です。

1)API内

// **********************************************************
// API//
**********************************************************

$twitter_url = ‘https://api.twitter.com/1/statuses/update.json’;

$twitter_url = ‘https://api.twitter.com/1.1/statuses/update.json’;

 

上記の1を1.1に変えるだけですよ。

なんだと思いつつ、1.1に変更しテスト投稿したら、問題なく出来ました。

 

カテゴリー:PHP, Tipsコメント(0)

【PHP】phpMyAdminの使い方

MySQLデータベースをコマンドラインからではなく、PHPでWEBページから操作できる管理ツール「phpMyAdmin」。
バージョンによって設定方法が違ってて、毎回時間がかかってしまう。
最新の3.5のインストールから設定方法をメモ。

http://www.phpmyadmin.net/home_page/から、phpMyAdminをダウンロード。
現在は3.5が最新です。

ダウンロードして解凍したフォルダをそのままFTPでアップロード。
フォルダ名は、わかりやすい名前に変えた方がいい。

PHPの設定ファイル「php.ini」内に、「extension=php_mysqli.dll」を追加。
;でコメント化されてたら、;を削除してください。
「php.ini」を保存しApacheを再起動して終了。

「phpMyAdmin」にブラウザでアクセスしたら使用できます。

最後に、アップロードしたphpMyAdminのフォルダ内から「config.sample.inc.php」を探します。このファイルをコピーして「config.inc.php」に名前を変更します。
「config.inc.php」をエディタで開いて設定していきます。

$cfg[‘blowfish_secret’] = ‘Takanix’;
※ パスワードを暗号化するためのパスフレーズを設定

その他の設定について取りあえず確認しておくことは次の通りです。

$cfg[‘Servers’][$i][‘host’] = ‘localhost’;
※MySQLのサーバがあるホスト名やIPアドレスを指定。WebサーバとMySQLが同じサーバ上にあれば「localhost」。

$cfg[‘Servers’][$i][‘extension’] = ‘mysql’;
※MySQL拡張を使用する場合は「mysqli」を記述。

以上で終了です。

今までのバージョンは、この「config.inc.php」を細かく設定したり、ブラウザから初期設定をしたりと結構難しかったけど、新しいバージョンからは設定しやすくなった。
デザインもかなり変わったので、以前のバージョンと比べたら最初は使いにくいかもしれません。

カテゴリー:PHP, Tipsコメント(0)

【PEAR】さくらサーバーで、受信メールの内容を取り出す

まず、さくらインターネットサーバーで以下の2点は完了しておいて下さい。
以前僕がブログ内で書いたものです。

  1. 【PEAR】さくらインターネットサーバーでPEARを使う
  2. 【空メール】さくらインターネットで、空メールからPHPプログラムを実行する。
  3. 【PEAR】さくらサーバーで、画像添付メールの画像をプログラムで取り出す。

2番で用意したPHPファイルに記述します。

1番で行ったPEARのインストール場所で記述しています。
文字エンコードは、UTF-8で書いています。

画像を保存したりしたい方は、3番を参照して下さい。

添付画像なしで、送信者アドレスと件名、本文を取得したい方のみの記述です。
多少軽くなるので、画像が必要の無い方はこちらで。

取得したメールアドレスや件名は、データーベースに登録するなり、テキストファイルに保存するなり、メールで送りなりして下さい。

————–ここから—————–

#!/usr/local/bin/php

 

<?php

//PEARのパスを設定

$path = ‘/home/(ユーザー名)/pear/PEAR/’;
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
require_once ‘/home/(ユーザー名)/pear/PEAR/Mail/mimeDecode.php’;

 

//受信メールから読み込み

$params[‘include_bodies’] = true;
$params[‘decode_bodies’] = true;
$params[‘decode_headers’] = true;
$params[‘input’] = file_get_contents(“php://stdin”);
$params[‘crlf’] = “\r\n”;

if (!$params[‘input’]) {

// 読み込み失敗

exit();

}

$structure = Mail_mimeDecode::decode($params);

//送信者のメールアドレスを抽出

$mail = $structure->headers[‘from’];

$mail = addslashes($mail);

$mail = str_replace(‘”‘,”,$mail);
$mail = preg_replace(‘/(^.*<|>$)/’, ”, $mail);

 

// 件名を取得

$subject = $structure->headers[‘subject’];

switch (strtolower($structure->ctype_primary)) {
case “text”:
$body = $structure->body;
break;
default:
$body = “”;
}

 

?>

————–ここまで—————–

 

詳細などは、【PEAR】さくらサーバーで、画像添付メールの画像をプログラムで取り出す。を参照して下さいね。
内容は画像保存以外、同じですので。

カテゴリー:PHP, Tips, さくらインターネットコメント(0)

【PEAR】さくらサーバーで、画像添付メールの画像をプログラムで取り出す。

まず、さくらインターネットサーバーで以下の2点は完了しておいて下さい。
以前僕がブログ内で書いたものです。

  1. 【PEAR】さくらインターネットサーバーでPEARを使う
  2. 【空メール】さくらインターネットで、空メールからPHPプログラムを実行する。

2番で用意したPHPファイルに記述します。

1番で行ったPEARのインストール場所で記述しています。
文字エンコードは、UTF-8で書いています。

————–ここから—————–

#!/usr/local/bin/php   //←さくらサーバーはこの記述

<?php
//PEARのパスを設定
$path = ‘/home/(ユーザー名)/pear/PEAR/’;
set_include_path(get_include_path() . PATH_SEPARATOR . $path);
require_once ‘/home/(ユーザー名)/pear/PEAR/Mail/mimeDecode.php’;

//受信メールから読み込み

$params[‘include_bodies’] = true;
$params[‘decode_bodies’] = true;
$params[‘decode_headers’] = true;
$params[‘input’] = file_get_contents(“php://stdin”);
$params[‘crlf’] = “\r\n”;  //Shift_JISで記述する場合は、\を¥で。

if (!$params[‘input’]) {

// 読み込み失敗

exit();

}

$structure = Mail_mimeDecode::decode($params);

//送信者のメールアドレスを抽出

$mail = $structure->headers[‘from’];
$mail = addslashes($mail);
$mail = str_replace(‘”‘,”,$mail);
$mail = preg_replace(‘/(^.*<|>$)/’, ”, $mail);

// 件名を取得

$subject = $structure->headers[‘subject’];

// 本文、添付ファイル(画像)を抽出

switch (strtolower($structure->ctype_primary)) {
case “text”:

// シングルパート(テキストのみ)

$body = $structure->body;
break;
case “multipart”:

// マルチパート(画像付き)

foreach ($structure->parts as $part) {
switch (strtolower($part->ctype_primary)) {
case “text”:
$body = $part->body;
break;
case “image”:

// 画像の拡張子を取得する

$type = strtolower($part->ctype_secondary);

// 添付ファイル保存

$photo = “sample”.$type;

$tmpName = ‘/home/(ユーザー名)/www/dir/’ . $photo; //画像の保存場所です。

//↑必ずサーバーパスで記述します。./dir/などの相対パスでは駄目です。
今回は、サンプルで画像名は、sampleにしています。

if ($fp = fopen($tmpName, “w”)) {

$length = strlen($part->body);

fwrite($fp, $part->body, $length);

fclose($fp);

}

break;
}
}
break;
default:
$body = “”;
}

?>

————–ここまで—————–

 

保存する「dir」ディレクトリは、権限を777にして下さいね。
エラーや保存できない理由の多くは、ディレクトリの権限です。

/home/(ユーザー名)/pear/PEAR/ さくらはこれがサーバーパスです。

ちなみに、Drive Networkは、/home/(ユーザー番号)/(ドメイン)/(保存ディレクトリ)/pear/PEAR/です。

 

件名は、$subject
本文は、$bodyで取得できます。
送信者メールアドレスは、$mailで取れます。

取得したメールアドレスや件名は、データーベースに登録するなり、テキストファイルに保存するなり、メールで送りなりして下さい。

カテゴリー:PHP, Tips, さくらインターネットコメント(1)

【PEAR】さくらインターネットサーバーでPEARを使う

さくらサーバーは、PEARのインストール方法が簡単にできるとの事で選んだ部分もあるのだが。
ただ、簡単とはいえ、インストール後に、必要なパッケージもインストールしないといけないので、間違えないようにメモ。

まず、go-pear.txt を保存して下さい。拡張子は.phpに変更して下さい。

さくらサーバーの場合は、FTPで接続し、www/以下にgo-pear.phpをアップロードして下さい。

wwwディレクトリと同じ場所に、「pear」とディレクトリを作っておきます。
※FTPで見ると、go-pear.phpをアップしたディレクトリの一つ上です。

ブラウザで、「http://(ドメイン名)/go-pear.php」にアクセスします。

ページ下の「NEXT」を押します。

 

 

 

 

 

 

次画面は以下のように入力します。1番の項目を「/home/(自分のアカウント)/www」に。
10番を「/home/(自分のアカウント)/www/go-pear-admin.php」に。
11番を「/usr/local/bin/php」に。

後は設定せずに、「install」ボタンを押す。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

インストールが終われば、www以下に、「go-pear-admin.php」が出来ているはずです。

エディターで開いて、8行目の「$pear_dir = ‘@pear_dir@’; // default of install」の部分を、
「$pear_dir = ‘/home/(アカウント名)/pear/PEAR’; // default of install 」に変更し保存。

 

ブラウザで、「http://(ドメイン名)/go-pear-admin.php」にアクセスします。すると下記画面に。

一番下の「Quick-Install a package」に、必要なパッケージ名を入力し、クイックインストール。

画像を添付したメールを自動で文章や件名、画像と分解して、
MySQLやサーバー内に画像を保存するのには、以下のパッケージ名を入力すれば大丈夫でした。
画像分解などのやり方はまた今度。
※画面上部のWarningは、他者にアクセスされると困るので、パスワードを付けてとのアラート。

【インストールしたパッケージ】

  • Mail
  • Mail_Mime
  • Mail_MimeDecode

最後に、さくらコントロールパネルにアクセスし、サーバツールの設定→PHP言語に関する設定→php.ini設定ファイル編集で
「include_path=”.:/home/(アカウント名)/pear/PEAR”」 の一行を追加し終了です。

カテゴリー:PHP, Tips, さくらインターネットコメント(4)

【PHP】Shift_JIS対策 「\」が入る場合

携帯サイトでShift_JISのエンコードで作らなきゃ駄目な場合、以下の文字が文字化けする。

「\」が入ってしまうのだ。この対策のメモ。

「表」→「表\」
「申」→「申\」
「ソ」→「ソ\」

となってしまうので、PHPで変数に代入するときや出力するときは
stripslashes()を使えばいい。

変数 = stripslashes( "文字列"または変数 );

$test = stripslashes($_POST[‘test’]);

print stripslashes($_POST[‘test’]);

変数に入れて使用するか、printを使用して、出力してもいいし。

 

セキュリティホールになる可能性があるが、php.iniか.htaccessで

php_value magic_quotes_gpc Off

magic_quotes_gpcをOFFにすれば早いのだが。。。

その場合は、逆に

変数 = addslashes( "文字列"または変数 );

$test =addslashes($_POST[‘test’]);

print addslashes($_POST[‘test’]);

 

カテゴリー:PHP, Tipsコメント(0)

【PHP】$_SERVER

結構、PHPで$_SERVERの環境変数を参照して使用するけど、結構忘れてしまうのでメモ。

$_SERVER[‘REMOTE_ADDR’] //現在ページをみているユーザの IP アドレス

110.111.113.22  など

$_SERVER[‘SERVER_SOFTWARE’] //サーバーソフト名

Apache

$_SERVER[‘SERVER_PROTOCOL’] //ページがリクエストされた時のプロトコル名とバージョン

HTTP/1.1

$_SERVER[‘REQUEST_METHOD’] //ページがリクエストされた時のリクエストメソッド名

POST、GETなど

$_SERVER[‘REMOTE_HOST’] //アクセス元ホスト

サーバーによっては出ない場合がある。

$_SERVER[‘HTTP_ACCEPT_LANGUAGE’] //パソコン言語設定

ja-jp

$_SERVER[‘HTTP_USER_AGENT’] //ユーザーエージェント

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7) AppleWebKit/534.48.3 (KHTML, like Gecko) Version/5.1 Safari/534.48.3

$_SERVER[‘SERVER_NAME’] //サーバーのホスト名

takanix.com

$_SERVER[‘PHP_SELF’] //現在実行しているスクリプトのファイル名

/test.php

$_SERVER[‘DOCUMENT_ROOT’] //スクリプトのドキュメントルートディレクトリ

/home/takanix.com/htdocs など

$_SERVER[‘HTTP_HOST’] //リクエストのHost

takanix.com

$_SERVER[‘QUERY_STRING’] //ページがリクエストされた時に、検索引数があればそれが格納される。

a=1&b=2&c=3

$_SERVER[‘HTTP_REFERER’] //現在のページの前に参照していたページのURL

https://takanix.com/index.php

$_SERVER[‘REMOTE_PORT’] //アクセス元ポート番号

61197

$_SERVER[‘SERVER_PORT’] //サーバーポート 通常80

80

$_SERVER[‘SCRIPT_NAME’] //スクリプトパス

/test.php

$_SERVER[‘argv’] //スクリプトに渡された引数を配列にしたものです。

on

$_SERVER[‘HTTPS’] //https接続かを判別。
上記の赤文字はとても使えます。

カテゴリー:PHPコメント(0)

【PHP】半角・全角文字の統一

【半角・全角文字の統一】
mb_convert_kana( 文字列 , “オプション” , “エンコーディング” );
【変換オプション】
r 「全角」英字を「半角」に
R 「半角」英字を「全角」に
n 「全角」数字を「半角」に
N 「半角」数字を「全角」に
a 「全角」英数字を「半角」に
A 「半角」英数字を「全角」に
s 「全角」スペースを「半角」に
S 「半角」スペースを「全角」に
k 「全角カタカナ」を「半角カタカナ」に
K 「半角カタカナ」「全角カタカナ」に
h 「全角ひらがな」「半角カタカナ」に
H 「半角カタカナ」「全角ひらがな」に
c 「全角カタカナ」「全角ひらがな」に
C 「全角ひらがな」「半角カタカナ」に
V 濁点付きの文字を1文字に変換。K、Hとともに使用
半角カタカナを全角カタカナに変換
$body=mb_convert_kana($_POST[“body”],”K”,”UTF8″);
全角カタカナを半角カタカナに変換
$body=mb_convert_kana($_POST[“body”],”k”,”UTF8″);
全角英数字を半角英数字に変更(記号も対象)
※一部だめな記号もある
$body =mb_convert_kana($_POST[“body”],”rna”,”UTF8″);

カテゴリー:PHP, Tipsコメント(0)

【PHP】メール送信コード

PHPでメール送信をする最も簡単なコードです。送信先 test@mail.com送信元 test@abc.comエンコード UTF-8

$mail=”test@mail.com”;$head = “From: test@abc.com”;$subject = “件名です。\n”;
$body .= “本文です。\n”;
$body .= “———————————————————————–\n”;
$body .= “送信日時:”.date(“Y/n/j H:i:s”, time()).”\n”;
// .=で文字と文字を結合します。
// date()は、日付出力の関数です。
// \nで目に見えない改行処理です。
// Shift_JISなら、【\n】は【¥n】と記述。
// メール送信
mb_language(‘ja’);
mb_internal_encoding(‘UTF8’);
mb_send_mail($mail, $subject, $body, $head);

//mb_internal_encodingの()内にソースで指定している文字エンコードを追加する。

カテゴリー:PHPコメント(0)

【cron】指定時間にPHPプログラムを実行する。設定覚え書き(ドライブネットワーク)

結構、cronというかSSHでの設定は嫌ですね。
自社サーバーならまだいいけど、クライアントのサーバーを設定するのは結構気をつけるし疲れます。

クライアントのサーバー「Drive Network(ドライブネットワーク)」ですが、設定方法をメモしておきます。
他のサーバーは、管理画面がありそこでcron設定が出来ますが、管理画面がなくSSHのみでの設定の場合に役立つかもしれません。

サーバー:FreeBSD Linuxなら同じかと。
当方、Mac OS X Lionのターミナルを使って作業。OSXならどのバージョンでも大丈夫。

1)SSH接続
UNIXコマンド 「ssh システムアカウント名@サイトドメイン」を入力します。
Drive Networkの場合は、csからはじまる番号がシステムアカウント名となるので、「ssh cs123456789@test.com」という感じで。
Drive Networkは、アカウントを複数作れますが「admin」のアカウントを使用してください。
※admin@〜のアカウントのシステムアカウント名を使って下さいね。 分からなければ、Drive Networkのオンラインヘルプページ→アカウント情報一覧で、システムアカウント名とパスワードなど確認できます。

ssh〜コマンドを入力するとパスワードの入力が求められるので、admin@〜のパスワードを入力して下さい。
※パスワードは、表示されません。

パスワードが正しく通ると、下記赤枠のメッセージが表示されます。

上記の「0 0 * * 1 /usr/local/bin/php /home/cs123456789/test.com/htdocs/test/test.php」のような一行は、指示コマンドです。

Drive Networkは、「/home/契約アカウント番号/ドメイン/htdocs/〜」がファイル名の指示になります。ファイル名は、homeディレクトリからの相対パスで書いて下さい。

2)あとは、設定だけです。
crontab -l で設定内容の確認。
crontab -r で設定削除。削除するかと聞かれたら、「y」か「n」を入力で削除できます。
crontab -e で編集。viというエディタがターミナル内でたちあがるので、そこで操作。

3)基本的なviの操作は以下のような感じです。

crontab -e

まず出てきた画面が以下です。この画面で入力された文字を消す場合は、矢印キーで移動して「x」キーで削除。

新規の場合は、何も入力されていないので、
「esc」キーを押して、viを入力モードに変えます。「esc」押すだけです。
挿入コマンド「i」を押します。これはコマンドなので、実際に「i」は入力されません。
その後、例えば「0 0 * * 1 /usr/local/bin/php /home/cs123456789/test.com/htdocs/test/test.php」とペーストすればOK。
ペーストは出来るので、あらかじめテキストエディットなどでコマンドを書いておくと便利です。
cronの指示は、改行せずに一行で書きます。複数指示がある場合は、2行目、3行目と書きます。

今回、cronの指示に「/usr/local/bin/php」と入れてあるのは、その後に続く「/home/cs123456789/test.com/htdocs/test/test.php」 がPHPのプログラムだからです。
指定時間に、自動で指定のファイルのPHPプログラムを実行するという事です。
※指示は、必ず半角スペースで区切って入力して下さい。

入力が終わったら、再度「esc」を押し、コマンドモードに戻し、「:w」で保存。「:q」でviを終了です。
ちなみに、保存せず戻りたい場合は、「:q!」と押せば良いです。
入力している時に間違えたら、一旦「esc」でコマンドモードに戻る「x」を押し、また「esc」を押し入力モードに戻って下さいね。

終わったら、確認のため、「crontab -l」で確認して下さい。

4)最後に、cronの書き方です。

上記3)をサンプルに説明します。

*□*□*□*□*□/usr/local/bin/php□/home/cs123456789/test.com/htdocs/test/test.php
※□は、半角スペースの意味です。

最初の5つの「*」を置き換えます。
5つの「*」は左から1つずつ意味があり、
分(0-59) 時(1-24) 日(1-31) 月(1-12) 曜日(0-7) となっています。

30 9 * * * で9時半に実行
*/3 * * * * で3分おきに実行
0 */1 * * *  で1時間おきに実行
0 0 * * 1 で月曜日の0時0分に実行

などなど

ターミナルは、最後「exit」と入力し終了して下さい。

 

カテゴリー:PHP, Tipsコメント(2)