PHP
PHP の readdir 関数はローカルネットワーク内のフォルダにしかアクセスできない。
外部サーバーにあるディレクトリ内ファイルの一覧を取得するには、fopen 関数を使用するといい。
------------------------------------------------
//urlをひらく。ブラウザでフォルダにアクセスした際、
//フォルダ一覧が見られるApacheの機能を利用。
$fp = @fopen(フォルダのパス, 'r');
while ( !feof($fp) ) {
$row = fgets($fp, 1024);
//ファイル名抽出処理。
}
fclose($fp);
------------------------------------------------
ただし、↑だとブラウザからのフォルダ一覧の表示も許可しなければいけないので、セキュリティ的にはよくない。
fopen は、FTP をサポートしているので ftpサーバーに対してなら ftp_nlist() で取得することも可能か?後日検証。
検索されるファイルが置かれているサーバーにファイルを一覧出力するプログラム(phpファイル)を置いて、その結果を受け取りサーバーで取得する方法もある。その場合、ファイル一覧を取得したいフォルダが複数あって実行のつどフォルダを指定したい場合、フォルダの数だけプログラムが必要か?
参考ページ
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1113905041
カテゴリー:PHP
twilioを使って電話をかけたりSMSを送ったときの覚書。言語はPHP。
1.ライブラリのダウンロードと設置
電話をかけるにもSMSを送るにも準備として、twilioのライブラリを設置する必要がある。
TwilioのPHPソースコード(zip)
解凍すると Services というフォルダが入っているのでそれをそのまま自分のサーバーにアップロードする。
ライブラリのインストールとSMS送信サンプルはこちらにもある(公式)
これで下準備完了。
2-1.twilioで電話をかける
次の二つのサンプルコードをアップロードして読み込むとtwilioの番号から電話をかけられる
twilio_call.php
--------------------------------------------------
<?php
require("Services/Twilio.php"); // PHPライブラリ
$sid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; // Account Sid
$token = "xxxxxxxxxxxxxxxxxxxxxxxxxx"; // Auth Token
$tel_to = "+8190xxxxxxxx"; // 発信先電話番号
$tel_from = "+81xxxxxxxxxx"; // twilioで取得した発信元電話番号
$twiml = "http://example.com/calling.xml"; // TwiML URL(absolute path)
$client = new Services_Twilio($sid, $token);
$call = $client->account->calls->create($tel_from, $tel_to, $twiml);
?>
--------------------------------------------------
calling.xml(この音声が読み上げられる)
--------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say language="ja-jp">Twilioへようこそ。</Say>
</Response>
--------------------------------------------------
このサンプルコードはこちらのまま
2-2.twilioでSMSを送る
次のサンプルコードをアップロードして読み込むとtwilioの番号からSMSが送れる
--------------------------------------------------
<?php
require "Services/Twilio.php"; // PHPライブラリ
//set our AccountSid and AuthToken from www.twilio.com/user/account
$AccountSid = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$AuthToken = "xxxxxxxxxxxxxxxxxxxxxxxxxx";
//instantiate a new Twilio Rest Client
//新しいクライアント オブジェクトのインスタンスを生成
$client = new Services_Twilio($AccountSid, $AuthToken);
//送信先の配列をつくる
//送信先電話番号 => 相手の名前
$people = array(
"+8190xxxxxxxx => "tarou",
"+8190xxxxxxxx => "hanako",
);
//Loop over all our friends. $number is a phone number above, and
//$name is the name next to it
foreach ($people as $number => $name) {
$sms = $client->account->messages->sendMessage(
//twilioから購入したSMS送信可能な電話番号
"+160xxxxxxxx",
// the number we are sending to - Any phone number
$number,
// the sms body
"このメッセージちゃんと届いてるか?"
);
// PC画面に表示されるメッセージ
echo $name . "にメッセージを送ったよ";
}
?>
--------------------------------------------------
このサンプルコードは公式のまま
カテゴリー:PHP, Twilio
PHPの配列をjavascriptに渡す場合は、いったんjson形式に変換するといい。
スクリプト例 ここから
--------------------------------------------------------
<?php
$hairetu = array('りんご', 'もも', 'なし');
//配列をJavaScriptに渡すために一度jsonに変換
$jsonTest=json_encode($hairetu);
?>
<html>
<head>
<title>タイトル</title>
</head>
<body>
<script type="text/javascript">
//JSON.parseを使って配列を受け取る
var test=JSON.parse('<?php echo $jsonTest; ?>');
for (var i = 0; i < test.length; i++) {
alert(test[i]);
}
</script>
</body>
</html>
--------------------------------------------------------
ここまで
参考サイト
http://future-software-labo.anyagent.net/php%E3%81%8B%E3%82%89javascript%E3%81%AB%E9%85%8D%E5%88%97%E3%82%92%E6%B8%A1%E3%81%99/
javascriptファイルが外部ファイルの場合
PHPファイル
--------------------------------------------------------
//カスタムデータ属性にjson形式の配列をセット
<script id="script" src="js/script.js" data-json-test ='<?php echo json_encode($hairetu)?>'></script>
--------------------------------------------------------
javascriptファイル
script.js(外部ファイル)
--------------------------------------------------------
//jQueryを利用してカスタムデータ属性にアクセス
var $script = $('#script');
var test = JSON.parse($script.attr('data-json-test'));
--------------------------------------------------------
参考サイト
http://qiita.com/cither/items/b98cc4e237dcc8f7e51f
http://dresscording.com/blog/html5/custom_data_attribute.html
カテゴリー:javascript, PHP
<??php
// ディレクトリのパスを記述
$dir = "dragon_ball1";
// ディレクトリの存在を確認し、ハンドルを取得
if(is_dir($dir) && $handle = opendir($dir)) {
// ループ処理
while(($file = readdir($handle)) !== false) {
//$path = $dir . $file;
// ファイルのみ取得
if(filetype($dir . "/" . $file) == "file") {
/********************
各ファイルへの処理
$file ファイル名
$path ファイルのパス
********************/
// ファイル名を出力する
echo $file . "
";
}
}
} else {
echo "ディレクトリがない";
}
?>
参考サイト(このサイトのをほぼそのままコピーした)
http://webkaru.net/php/function-filetype/
カテゴリー:PHP
php-mecab を使用してるページがエラーしか表示されなくなった。
表示されたエラー
---------------------------------------------------
Fatal error: Class 'Mecab' not found in /home/username/www/xxxx.html on line 20
---------------------------------------------------
推測だが、さくらインターネットの PHP のバージョンが勝手に変更されたのが原因だと思う。phpinfo で mecab が表示されない。つまり、php-mecab が認識されていない。
解決用法、mecab および php-mecab を入れ直した。
入れ直し時に注意すること。
・mecab と php-mecab の古いファイルは念のため削除しておく。上書きされるかと思ったがうまくいかなかった。(これがうまくいかない原因だったかは不明)
・php-mecab のインストール時に php のバージョンを指定する箇所があるので新しいバージョンに合わせる。
・さくらにデフォルトインストールの mecab に問題があった場合解決が難しいので、自前の mecab を local 領域にいれて使用したほうが解決しやすい。(今回、デフォルト → 自前 に変更した)
カテゴリー:mecab, PHP, さくらインターネット
さくらVPSでのインストールはこちら
さくらのレンタルサーバーをプラン変更した際、 pear の再設定に手間取ったので覚書。
php ファイル で、DB ライブラリとPager ライブラリを利用しているため、それぞれを利用可能にする必要があった。さくらのレンタルサーバーには、もともと pear がインストールされているが件のライブラリ は入っていない。もともと入っている pear は共有部分のに入っているため、ライブラリをインストールするには、 pear 自体も ローカル部分にインストール必要があった。
1.さくらサーバーに pear のインストール
pear のインストール方法はいくつかあるが、今回は go-pear を使った。
go-pear は古くてインストール途中で止まるものがインターネット上にたくさんある。
2016年10月3日現在有効な pear-go
上記リンクを右クリックして www フォルダ以下に「go-pear.php」という名前で保存。その後、ブラウザからアクセスする。
設定項目を埋めて、インストールボタンを押す。設定項目のインストール先は www フォルダ(Installation prefix($prefix))直下がデフォルトのようだが、移行元の pear が「/home/ユーザー名/」の直下だったので、同じようにした。
設定の参考にしたページ こちら
インストールは無事完了したが、Warning が出た。
----------------------------------------------
Warning: Can not determine the URL of the freshly installed Web Frontend
(file: /home/ユーザー名/index.php).
Please access it manually !
----------------------------------------------
これは「インストール後に生成された index.php ファイルが www フォルダより上にあるためアクセスできないよ」という内容のもの。ブラウザからライブラリをインストールするには、index.php へのアクセスが必要なので、www フォルダ直下に「gopear」というフォルダを作って、index.php ファイルをコピーした。
2.ライブラリのインストール
ライブラリをインストールするにはターミナルから操作する方法と 件の index.php へアクセスして操作する方法がある。
最初ターミナルからサーバーにログインしてコマンドを実施した
//DB ライブラリをインストールするコマンド
------------------------
% pear install -a DB
------------------------
インストールできたかは list でパッケージの一覧を取得すればいい
------------------------
% pear -c /home/acount_name/pear.conf list
------------------------
※pear.conf info のところが .pearrc になっている場合があるかも?find /home/acount_name -name '*pear*' で対象のファイルがあるか確認するといい。
※ -c file の詳細は pear help options で確認できる
これだとさくらサーバーに最初からある pear の情報が出る
------------------------
% pear list
------------------------
すると、エラーが出てインストールできなかった
//エラー内容
------------------------
Cannot install, php_dir for channel "pear.php.net" is not writeable by the current user
------------------------
書き込みができないという内容。どうもインストールを実施しようとしている pear が、さくらサーバーにもともとインストールされている pear らしい。
//pear のバージョンを調べるとどの pear に対して命令しているのか分かる
------------------------
% pear info PEAR
------------------------
自前のpearならこれ
------------------------
% pear -c /home/acount_name/pear.conf info PEAR
------------------------
自分でインストールした pear に対して命令してもいいが、index.php からライブラリをインストールする方法に変更。
pear インストール時に生成された index.php にブラウザからアクセス。
画面の右上にある「Search package by name」から、DB と Pager を検索してインストール。
DB と名前の入るライブラリがたくさんあって、検索結果が出るまで時間がかかった。読み込み中がずっと続いたのであせった。
インストールできたら、ドキュメントルートの php.ini を変更してpear を include して使う。
カテゴリー:PHP, さくらインターネット
DreamHostでPHPを使ってmysqlデータベースへ接続する方法のメモ。
//mysqlの接続
///////////////////////////////////////////////
$hostname = ""; // mysql.example.com (「mysql.」 + 「独自ドメイン」)
$username = ""; // データベースを設定したときに決めたユーザ名
$password = ""; // データベースを設定したときに決めたパスワード
$database = ""; // 接続するデータベース名
$link = mysql_connect($hostname,$username,$password);
mysql_select_db($database) or die("Unable to select database");
mysql_query('SET NAMES utf8', $link); //←文字化け対策
//mysql_set_charset('utf8'); //←もしくはこれ
///////////////////////////////////////////////
//出力の例
///////////////////////////////////////////////
$sql = "SELECT * FROM table_name";
$result = mysql_query($sql,$link) or die("Unable to select: ".mysql_error());
while($datas = mysql_fetch_assoc($result)) {
echo $datas['column_name'] . "
";
}
///////////////////////////////////////////////
//mysqlの切断
///////////////////////////////////////////////
mysql_close($link);
///////////////////////////////////////////////
カテゴリー:DreamHost, mysql, PHP
さくらインターネットにて .htaccess 内に RewriteRule を記述してリダイレクトを指定したがうまくいかなかった。どうもドメインをまたいでのURL遷移は禁止されているらしい。
・さくらインターネットで、RewriteRule を用いて異なるドメイン間のリダイレクトは不可。
php を使ってのリダイレクトは問題なく出来た。
---------------------------------
<?php
header( "HTTP/1.1 301 Moved Permanently" );
header( "Location: http://$new_url" );
?>
---------------------------------
カテゴリー:PHP, さくらインターネット
PHPにてmysql_fetch_assocを実行したところエラーが出た
エラー内容
-------------------------------------------------------
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /home/username/www/test.php on line 183
-------------------------------------------------------
日本語訳
-------------------------------------------------------
「mysql_fetch_assoc()」は、パラメータ1がリソース型(データベース操作をして取り出した値)であると期待したが、boolean値(falseのこと)が与えられた。test.phpの183行目において。
-------------------------------------------------------
ようは、queryの実行に失敗していて、データベースの値は取り出せず、falseになっているということ。
・リソース →ファイル接続、データベース接続 などを通して使用する PHP 外の情報資源。
・expect A to do ~ → Aが~するのを期待する。
カテゴリー:mysql, PHP
preg_replaceなどで使う後方参照について。
たとえば、後方参照「$1」の後に数字の「100」がくる場合、次のように記述すればいい。
----------------------------------
${1}100
----------------------------------
カテゴリー:PHP