PHP


さくらでphp ファイルを .html で動かすため.htaccessがやってること

.htaccess の中身
-------------------------------------------------

#スラッシュ(/) で終わるURLにアクセスがあったときのアクセスの順番。
#デフォルトは index.html。
#index.html index.php 共にない場合、.ht を見に行き、Forbidden(403) と表示される。
#最後に .ht を置くことで ディレクトリの構造を見せない。

DirectoryIndex index.html index.php .ht


#このバイナリファイルで php のバージョンが決まる
#myphp-scriptという種類のファイルにアクセスがあったら /php.cgiで処理する

Action myphp-script /php.cgi


#.phpと.htmlで終わるファイルをmyphp-scriptという種類とする

AddHandler myphp-script .php .html
-------------------------------------------------

参考ページ

【PHP】mysqlでselectしたデータの出力時に使う変数名に変数を使う

$get_datas['カラム名'];

↓↓↓

$get_datas[$culumn_name];

変数名をそのまま記述すればOK。可変変数は不要。

XMLHttpRequest cannot load エラーの対処法

jqueryでajaxを利用すると、コンソールにエラーが出た

実行したjquery
-------------------------------------------------
$.post(
//アクセスするURL
'http://sub.exemple.com',
{
'value': value
},
function(data){
//リクエスト成功時の処理
});
-------------------------------------------------

コンソールに出たエラー
-------------------------------------------------
XMLHttpRequest cannot load http://sub.exemple.com. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://exemple.com' is therefore not allowed access.
-------------------------------------------------

リクエスト成功時に実行される処理も行われない。

header("Access-Control-Allow-Origin
解決方法は、http://sub.exemple.com にAccess-Control-Allow-Origin レスポンスヘッダを追加する。

ワイルドカードですべてのドメインからの接続を許可
-------------------------------------------------
header("Access-Control-Allow-Origin: *");
-------------------------------------------------

特定のドメインからの接続のみを許可する場合
-------------------------------------------------
header("Access-Control-Allow-Origin: http://exemple.com");
-------------------------------------------------

.htaccessに書き込むなら
-------------------------------------------------
Header append Access-Control-Allow-Origin: *
-------------------------------------------------

mysql_query($sql) OR die(mysql_error()) の意味

mysql_query($sql) OR die(mysql_error()) の意味。

or演算子 → 左辺がtrueの場合に右辺の式は無視される
die関数 → 指定されたメッセージを出力して、スクリプトを強制終了させる関数

【さくら】pearのCache_Liteでキャッシュする

PEAR ライブラリの Cache_Lite でキャッシュする方法
サンプルスクリプトも含めてこのページがわかりやすかった

サンプルスクリプトもほぼそのまま
----------------------------------------------------------------
<?php

// クラス読み込み
require_once('Cache/Lite.php');

// IDのセット
//$cache_id = $_SERVER["REQUEST_URI"]; //こんなんでもいい
$cache_id = '123456';
// オプション
$options = array(
//さくらの場合、/tmp/はホームディレクトリより上にあるがキャッシュは保存できる。ただ他ユーザーと共有なのでホームディレクトリ以下に保存するほうがいいと思う
// 'cacheDir' => '/tmp/', //キャッシュ保存先
'cacheDir' => '/home/acount_name/tmp/', //共有サーバーなのでホームディレクトリ以下。フォルダは作って事前に作る必要がある
'caching' => 'true', // キャッシュを有効に
'automaticSerialization' => 'true', // 配列を保存可能に
'lifeTime' => 10, // 10(生存時間:10秒)
'automaticCleaningFactor' => 200, // 自動で古いファイルを削除(1/200の確率で実行)
'hashedDirectoryLevel' => 1, // ディレクトリ階層の深さ(高速になる)
);

// オブジェクトのnew
$cache = new Cache_Lite($options);

// キャッシュデータがあるかどうかの判別
if ( $cache_data = $cache->get($cache_id) )
{
echo "【キャッシュ使用】
";
$buff = $cache_data;
}
else
{
// キャッシュデータがない。APIからデータを読み込む処理
// データ取得処理ここから
// ……………………… $read_data にデータを入れておく
$read_data = date('Y/m/d H:i:s');
// データ取得処理ここまで

echo "【キャッシュ未使用】
";
$buff = $read_data;
//$cache->save($buff); ← $cache_id は省略できる?(明示したほうが安心)
$cache->save($buff,$cache_id); //キャッシュを保存
}
print_r($buff);
?>
----------------------------------------------------------------

JQUERYのPOST(ajax)で戻り値を複数返す

JQUERYのPOST(ajax)で戻り値を複数返すには、PHPからjavascriptへのデータの受け渡しの際に配列をJSON形式に変換する

//PHP側
-------------------------------------
$data_arr = array($data1, $data2);

//javascriptに受け渡すため配列をJSON形式に変換
$datas = json_encode($data_arr);
echo $datas; //JQUERYに渡す
-------------------------------------

JQUERY側
-------------------------------------
data_arr = JSON.parse(data); //戻り値をJSONとして解析
alert(data_arr[0]);
alert(data_arr[1]);
-------------------------------------

【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を送る

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の配列をjavascriptに渡す

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

【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/

1 / 512345