refirio.org
気ままな雑記帳&実験場。好き勝手に色々やっています。
エントリー
タグ「PHP」の検索結果は以下のとおりです。
PHPでファイルアップロードサイズの上限を変更
とっくにメモしてあると思ったらメモしていなかったので、コピペ&調整で使えるようにメモ。
PHPのデフォルト設定では2M以上のファイルはアップロードできないけど、.htaccess
ファイルを作成して以下の内容を書けば上限を変更できる。php.ini
の編集権限があれば、そちらで設定してもOK。
php_value max_execution_time 600
php_value memory_limit 512M
php_value post_max_size 288M
php_value upload_max_filesize 256M
サイズは upload_max_filesize < post_max_size < memory_limit
となるように設定する。場合によってはApache側の設定も必要。
以下、参考ページ。
max_input_vars対策にデータをまとめて送信
- 2013/03/13 09:56
- カテゴリー:制作, プログラム
- タグ:PHP, JavaScript
PHP5.3.9以降では max_input_vars
という設定が設けられており、入力データ数が多すぎる場合は自動的にデータがカットされるようになっています。初期値は 1000
なので、入力欄を1500個並べても、PHP側で受け取れるのは1000個までということです。
この設定は、一例ですが .htaccess
で
php_value max_input_vars 2000
このようにすれば緩和することができます。(この場合、PHP側で受け取れるのは2000個までということです。)
ですがPHPの設定変更を許可されていない環境で、どうしても大量の値を受け取る必要がある時のために、jQueryプラグインでデータをまとめて送れるようにしてみました。
入力欄が大量に並ばない設計にすればいいですが、今更プログラムの設計を変えるのは難しいよ。という場合に。
メディア管理機能強化のための下調べ
- 2012/11/15 11:09
- カテゴリー:制作, プログラム, HTML+CSS
- タグ:PHP, JavaScript
主にfreoのメディア管理機能強化のために色々と調べていたけど、どれも自分の技術で実現可能っぽい。
具体的には、ブラウザ上で画像をトリミングしたり、縮小・反転・回転したり、画像に直接何か書いたり、サイズが違ってもレイアウトが崩れないようにグリッドで並べたり。
- ブラウザ上で画像をトリミング
- よくあるペイントツールみたいに、範囲を指定して切り抜き。以前に作ったもの。
- 画像を反転
- ImageMagickなら命令一発で反転できる。GDには反転命令が無いみたいなので、ピクセル操作で反転。
- 画像を回転
- ImageMagick・GDともに命令一発でできた。あと、画像の縦横比率を保持して縮小…は、普段から使っているので何も難しいことは無い。
- 画像をグレースケールに変換
- ImageMagick・GDともに命令一発でできた。
- ブラウザ上で直接描画
- 以前に作ったもの。画像に手書き文字を書き加えて上書き保存…を作るのも(手間はかかるかもだけど)多分難しくは無い。画像と手書き文字をJavaScriptで一枚の画像に合成するのは難しいかもだけど、サーバーサイドで合成すればいいし。
- 縦横比の異なる画像をグリッドで表示
- もっと手こずるかと思ったけど、文字の水平位置を揃えないのなら特に難しいことは無かった。画像一覧は、基本的にこんな表示が良さそう。
- 縦横比の異なる画像をトリミングして表示
- サイズの比率が違う画像とか大きい画像とか極端に小さい画像とかを、CSSでトリミング&サイズ調整して一覧表示。こんな表示もアリかも。
PHPでファイルを圧縮&解凍(ZipArchive()版)
PHP5.2以降で使える ZipArchive でファイルを圧縮&解凍するメモ。
ファイルを圧縮
test.txt
と test/test.jpg
を圧縮。圧縮後のファイル名は test.zip
。
<?php
$zip = new ZipArchive();
if ($zip->open('test.zip', ZipArchive::CREATE) === true) {
$zip->addFile('test.txt');
$zip->addFile('test/test.jpg');
$zip->close();
} else {
exit('open error.');
}
echo 'complete';
?>
ファイルを解凍
test.zip
を解凍。解凍したファイルは ./extracted/
内に作成。
<?php
$zip = new ZipArchive();
if ($zip->open('./test.zip') === true) {
if ($zip->extractTo('./extracted/') === true) {
$zip->close();
} else {
exit('extract error.');
}
} else {
exit('open error.');
}
echo 'complete';
?>
PHPでファイルを圧縮&解凍(shell_exec()版)
PHPでファイルを圧縮&解凍する方法のメモ。shell_exec()
で zip
コマンドと unzip
コマンドを呼び出すので、多少環境を選ぶかも。ロリポップサーバーでは動作した。
/usr/bin/zip
のようにパスを指定しなければダメなサーバーもあるみたい。
圧縮だけなら、PHPで圧縮ファイル作成(zip) の方法でも可能。
ファイルを圧縮
zip
コマンドで、test
ディレクトリを圧縮。圧縮後のファイル名は test.zip
。
<?php
if (shell_exec('zip -r test.zip test')) {
exit('OK');
} else {
exit('NG');
}
?>
ファイルを解凍
unzip
コマンドで、test.zip
を解凍。
<?php
if (shell_exec('unzip test.zip')) {
exit('OK');
} else {
exit('NG');
}
?>
PHP初級講座のスライド
某所で(主に)Webデザイナーさん向けにPHPの基礎を喋ってきたので、そのスライドを置いておきます。
カーソルキーの「←」で戻り、「→」で進みます。もしくは画面クリックでも進みます。モダンブラウザなら見られるはず。
口頭で説明しつつのセミナーなので、スライドだけ見ると少し言葉足らずではある。(´・ω・`)
PHPでExcelデータを表示するメモ
PHPでExcelファイルの内容を一覧表示するためのメモ。
Excelファイルを扱うのは厄介ですが、PHPExcel を使えば比較的容易に扱うことができます。Excelファイルを作成したりファイルの内容を一括で取得して配列に突っ込んだり…のサンプルは多いものの、fget_csv()
みたいに一件ずつ処理していくサンプルが少なかったので自分用に方法をメモ。
主に、以下のページを参考にしています。
以下、xlsx
か xls
ファイルの内容をテキストデータとして取得するメモ。最終的には配列に突っ込んでいるけど、個別に処理するのも難しくないです。
<?php
echo "<!DOCTYPE html>\n";
echo "<html lang=\"ja\">\n";
echo "<head>\n";
echo "<meta charset=\"utf-8\" />\n";
echo "<title>Excel</title>\n";
echo "</head>\n";
echo "<body>\n";
echo "<h1>Excel</h1>\n";
echo "<pre>\n";
//読み込むExcelファイル
$file = './sample.xlsx';
//ライブラリを読み込む
require_once '../Classes/PHPExcel/IOFactory.php';
//ファイルを読み込む
if (preg_match('/\.xlsx$/', $file)) {
$type = 'Excel2007';
} elseif (preg_match('/\.xls$/', $file)) {
$type = 'Excel5';
} else {
exit('error');
}
$reader = PHPExcel_IOFactory::createReader($type);
$excel = $reader->load($file);
//シートオブジェクトの取得
$sheets = $excel->getAllSheets();
//$sheets[0] = $excel->getSheet(0);
$data = array();
//シートごとに処理
foreach ($sheets as $s => $sheet) {
//シート名を取得
$data[$s]['title'] = $sheet->getTitle();
//列数と行数を取得
$row_max = $sheet->getHighestRow();
$col_max = PHPExcel_Cell::columnIndexFromString($sheet->getHighestColumn()) - 1;
//セルごとにテキストデータを取得
$content = array();
$flag = false;
for ($r = 1; $r <= $row_max; $r++) {
for ($c = 0; $c <= $col_max; $c++) {
$text = get_text($sheet->getCellByColumnAndRow($c, $r));
if (!is_null($text) and $flag == false) {
$flag = true;
}
$content[$r][$c] = $text;
}
}
if ($flag == false) {
$content = array();
}
//データをセット
$data[$s]['content'] = $content;
}
//結果を出力
print_r($data);
echo "</pre>\n";
echo "</body>\n";
echo "</html>\n";
exit;
/* 指定したセルの文字列を取得 */
function get_text($cell = null)
{
if (is_null($cell)) {
return null;
}
$value = $cell->getValue();
if (is_object($value)) {
//オブジェクトが返ってきたら、リッチテキスト要素を取得
$rich_texts = $value->getRichTextElements();
//配列で返ってくるので、そこからさらに文字列を抽出
$texts = array();
foreach ($rich_texts as $rich_text) {
$texts[] = $rich_text->getText();
}
//連結する
$text = implode('', $texts);
} else {
if (empty($value)) {
$text = null;
} else {
$text = $value;
}
}
return $text;
}
?>
PHPでRSSを解析するメモ
ブログのRSSを解析して記事一覧を表示…とかをするためのメモ。
「RSS2.0と宣言されているのにデータの一部がAtomで配信されている。」とか時々あるので、宣言は信用せずに「それらしいデータがないか探す」という方針で実装。
feed_load_file()
を実行すれば、階層のある連想配列でデータをまとめて返すので、あとは表示するだけ…という仕様にしています。
<?php
$feed = feed_load_file('http://freo.jp/info/news/feed');
echo "<!DOCTYPE html>\n";
echo "<html lang=\"ja\">\n";
echo "<head>\n";
echo "<meta charset=\"utf-8\" />\n";
echo "<title>RSSの解析</title>\n";
echo "</head>\n";
echo "<body>\n";
if (empty($feed)) {
echo 'エラー';
} else {
echo '<strong>形式</strong>';
echo '<hr />';
echo $feed['type'];
echo '<hr />';
echo '<strong>概要</strong>';
echo '<hr />';
echo 'title : ' . $feed['channel']['title'] . '<br />';
echo 'link : ' . $feed['channel']['link'] . '<br />';
echo 'description : ' . $feed['channel']['description'] . '<br />';
echo '<hr />';
echo '<strong>記事</strong>';
echo '<hr />';
foreach ($feed['item'] as $item) {
if (strtotime($item['date']) > time()) {
continue;
}
echo 'title : ' . $item['title'] . '<br />';
echo 'link : ' . $item['link'] . '<br />';
echo 'description : ' . $item['description'] . '<br />';
echo 'content : ' . $item['content'] . '<br />';
echo 'date : ' . $item['date'] . '<br />';
echo '<hr />';
}
}
echo "</body>\n";
echo "</html>\n";
exit;
feed_load_file()
の内容は、長いので続きで。
file_get_contents()でgetリクエストとpostリクエストを送るメモ
PHPの file_get_contents()
を使えばファイルの内容を表示できますが、指定したサーバーにgetやpostのリクエストを送ることもできます。
WebAPIを扱うときなど、たまに過去のコードを探すので自分用にメモ。
get
<?php
$result = file_get_contents('http://www.example.com/get.php?test1=test1&test2=テスト2');
echo '<pre>' . $result . '</pre>';
?>
http://www.example.com/get.php
に対して test1=test1
と test2=テスト2
をgetで送信し、結果を画面に表示。
post
<?php
$result = file_get_contents(
'http://www.example.com/post.php',
false,
stream_context_create(
array(
'http' => array(
'method' => 'POST',
'header' => implode(
"\r\n",
array(
'Content-Type: application/x-www-form-urlencoded'
)
),
'content' => http_build_query(
array(
'test1' => 'test1',
'test2' => 'テスト2'
)
)
)
)
)
);
echo '<pre>' . $result . '</pre>';
?>
http://www.example.com/post.php
に対して test1=test1
と test2=テスト2
をpostで送信し、結果を画面に表示。
PHPで日付を扱うメモ
ごく基本的な機能だけど、コピー&ペーストのために定期的に過去のコードを漁るので自分用にメモ。
<?php
//日時を表示
echo date('Y-m-d H:i:s');
//曜日を表示
$weeks = array('日', '月', '火', '水', '木', '金', '土');
echo $weeks[date('w')];
//日時を指定して表示
echo date('Y-m-d H:i:s', strtotime('2012-07-01'));
echo date('Y-m-d H:i:s', strtotime('2012-07-04 16:30:21'));
?>
ユーティリティ
カテゴリー
タグクラウド
- 33分探偵1
- AMBITIOUS JAPAN!1
- ARIA2
- Air2
- Android2
- BLACK CAT2
- C#1
- Chrome2
- FINAL FANTASY2
- Flash2
- GAE1
- JavaScript18
- Kindle1
- Mac2
- MySQL7
- PHP68
- PayPal1
- Perl3
- PostgreSQL2
- Python1
- Ruby1
- SQLite6
- Switch1
- TinyMCE4
- Windows Media Player1
- bot1
- fragile1
- freo53
- iPhone3
- iTunes1
- levis1
- mod_rewrite2
- node.js1
- sola1
- true tears1
- いつかのメリークリスマス1
- いつか帰るところ1
- けいおん!1
- ここにしか咲かない花3
- とある魔術の禁書目録1
- とらドラ!2
- ひぐらしのなく頃に2
- みなみけ1
- イラスト4
- ガンダム003
- クロノトリガー1
- ザナルカンドにて4
- テラ1
- ニコニコ動画8
- ハゲタカ2
- ピアノ36
- マクロスF3
- ユニットテスト1
- ルパン三世1
- ローズ・オブ・メイ4
- 初音ミク1
- 半分の月がのぼる空1
- 名探偵コナン1
- 戦場のメリークリスマス5
- 携帯10
- 攻殻機動隊1
- 桜2
- 機工魔術士1
- 決行~姫をさがして~1
- 涼宮ハルヒの憂鬱10
- 深愛2
- 灼眼のシャナ4
- 聖剣伝説2
- 蕾3
- 蟲師2
- 返信2
- 野球1
- 鋼の錬金術師1