ラベル zip の投稿を表示しています。 すべての投稿を表示
ラベル zip の投稿を表示しています。 すべての投稿を表示

2010年5月8日土曜日

Webでの静的ファイル取得について Google App Engineと Google Codeを比較

(2010/5/11 修正:Google Codeでもmax-ageが設定可能だったので一部修正。参考:SubversionFAQ - support - Subversion FAQ - Project Hosting on Google Code


スタティックなファイルのhttp(s)での取得について、Google App EngineとGoogle Codeを比較してみる。


Google App Engine
Google Code
https


gzip
あり
なし
Etag
あり
あり
Last-Modified
なし
あり
max-age
(Expires)
設定可能
デフォルトは10分
設定可能
デフォルトは1分

Server
Google Frontend
Apache


URLは下記のような感じ。App Engineの方がちょっと短い。
Google App Engine → http://<アプリ名>.appspot.com/<パス>
Google Code → http://<プロジェクト名>.googlecode.com/svn/<パス>


Google App Engineのメリット
gzipで圧縮されるのでトラフィックを減らすことができる。
Google Codeの方はmax-ageはまだいいとしても、Google Codeはgzipされないのが痛い。
主なクライアントがSubversion(等)のクライアントソフトだから仕方ないか。


Google Codeのメリット
そのままSubversion(等)でバージョン管理できる。使い慣れたクライアントソフトで制御できるので使い易い。
Google App Engine Launcherは毎回パスワードを訊かれるのが面倒。


Google App Engineは転送量等に制限があるが、かといってGoogle Codeでもそんなにも使ったらBanされるんだろう。
(参考:floatingdays: Google Codeの JavaScriptファイルを外部サイトから読み込んでも良い?

それから、Google Codeではその性格上オープンソースとして公開する必要がある。

2009年5月13日水曜日

PHP 5.3 RC2に無いエクステンション

PHP5.3 RC2(Windows版)で確認したところ、下記のエクステンションが無いことが気になった。

  • php_mcrypt.dll
  • php_pdo.dll
  • php_zip.dll

でも、MCryptもPDOもZIPもできたので問題無かった。
PHP本体に取り込まれた?

2009年3月27日金曜日

PHPの ZipArchiveのエラーコード

ZipArchiveをopen()した時のエラーコードの定数と、実際の値を調べたのでメモ。

ZIPARCHIVE::ER_EXISTS = 10
ZIPARCHIVE::ER_INCONS = 21
ZIPARCHIVE::ER_INVAL = 18
ZIPARCHIVE::ER_MEMORY = 14
ZIPARCHIVE::ER_NOENT = 9
ZIPARCHIVE::ER_NOZIP = 19
ZIPARCHIVE::ER_OPEN = 11
ZIPARCHIVE::ER_READ = 5
ZIPARCHIVE::ER_SEEK = 4

でも、PHP: 定義済み定数 - Manual(コメント欄)にはもっと詳しく書いてあった。


参考:PHP: ZipArchive::open - Manual

PHPの ZipArchiveの open()に失敗する問題の解決方法

下記のようにPHPでZIPを作成する処理。

$zipArc = new ZipArchive();
$zipArc->open($path, ZIPARCHIVE::OVERWRITE);

以前は普通に実行できたのに、PHPをバージョンアップしたらできなくなっていた。

PHP: ZipArchive::open - Manualに解決策が書いてあり、それに従って下記のようにコードを変えたら実行できるようになった。
$zipArc = new ZipArchive();
$zipArc->open($path, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);

キーワードが少なくてGoogle検索し辛い問題だった。

ちなみに、定数の値は下記のようになっていた。
ZIPARCHIVE::CREATE = 1
ZIPARCHIVE::OVERWRITE = 8

2008年10月13日月曜日

郵便番号検索APIのまとめ

無償のもののみピックアップ。
住所からの検索ができるものが意外に少ない。



(2011/07/21 追記)
今ならGoogle日本語入力のAPI(Google CGI API for Japanese Input)を使うという手もある。
参考:floatingdays: Web form用入力ヘルパー JavaScriptライブラリいろいろ
サンプル:GAddress Finder 動作サンプル - ゼロと無限の間に

2008年1月27日日曜日

PHPでファイルを zipするためのサンプルと 4つの注意点

PHPでzipするサンプルと注意点。


注意点

  • (Windowsの場合) php.iniの、extension=php_zip.dllのコメントアウトを外しておかないと、「Fatal error: Class 'ZipArchive' not found」が出る。
  • zipのopen時に、
    • ZIPARCHIVE::CREATEを指定すると、指定したパスにまだzipが無い場合は新規作成し、既にzipがある場合はそのzipに各ファイルが追加される。
    • ZIPARCHIVE::OVERWRITEを指定すると、常にzipを新規作成する。既存のzipがある場合は、zip自体を上書きする。(2009/03/23訂正:仕様が変わり、既存のZIPが無い場合にOVERWRITEを指定するとopen()に失敗するようになった。対策は下記サンプルコードを参照。)
  • zipを展開するクライアントがWindowsの場合、ファイル名はSJISにしないと文字化けする。
  • zipをダウンロードさせる場合、Content-typeに既知の値("application/zip"や"application/x-zip-compressed")を指定すると、IEでダウンロードするとzipを展開できない。なのでContent-typeには存在しない適当な値を指定する。(未知のContent-typeの場合は拡張子からzipであることを推測しているようだ。)
    ただし7-zipでなら開けたので、正しいContent-typeでもzip自体は正しくできているようだ。


サンプルコード
<?php
$zipPath = './test.zip';

//zipをopenする
$zip = new ZipArchive();
$rtn = $zip->open('./test.zip', ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE);
if ($rtn !== true) {
 exit('zip作成に失敗! エラーコード=' . $rtn);
}

//ファイルをzipに追加する
$zip->addFile('./zip.php', 'zip.php'); //ファイルのパスとzip後のファイル名
$zip->addFile('./zip.php', mb_convert_encoding('このPHPのソースファイル.php', 'SJIS'));

//テキストファイルを動的にzipに追加する
$text = " 動的に書いた \n テキストファイル ";
$zip->addFromString('dynamic.txt', $text); //ファイルのパスとその内容

//zipをcloseする
$zip->close();

//zipファイルを出力する
header('Content-type: application/x-zip-dummy-content-type'); //存在しないtypeにする
$zipName = mb_convert_encoding('zipのテスト.zip', 'SJIS');
header('Content-Disposition: attachment; filename=' . $zipName);
echo file_get_contents($zipPath);

(更新履歴)
2009/03/23 openの第2引数を変更


参考:
 PHP: Zip - Manual
 codeなにがし::ブラウザ上でローカルファイルをZIP圧縮 (文字コードについての参考)
 ZIP (ファイルフォーマット) - Wikipedia (Content-typeについての参考。使えなかったが。)

ブログ アーカイブ

tags