yum updateの実行中にエラーが発生
実行環境(CentOS6.7)
yum updateを実行している途中に下記のようなエラーが発生。
rpmdb: read: 0xb324784d8, 4096: Input/output error
処理は1時間以上止まったままなので仕方なく電源長押しで強制シャットダウン。
解決方法は下記のコマンドを実行
rpm --rebuilddb
yum check-update
ハードディスクが壊れたと思ってかなり焦ったけど、不具合は無事解決しました。
yum updateを実行している途中に下記のようなエラーが発生。
rpmdb: read: 0xb324784d8, 4096: Input/output error
処理は1時間以上止まったままなので仕方なく電源長押しで強制シャットダウン。
解決方法は下記のコマンドを実行
rpm --rebuilddb
yum check-update
ハードディスクが壊れたと思ってかなり焦ったけど、不具合は無事解決しました。
mysqlに画像ファイルを格納する(2)
データベースに登録してある画像ファイルを表示する。
【controller】
public function displayAction()
{
//レイアウトを無効にする
$this->_helper->layout->disableLayout();
// viewを使用しない
$this->_helper->viewRenderer->setNoRender();
// 出力のバッファリングを有効にする
ob_start();
// POSTからデータを取得する
$info = array();
$info['fileid'] = $this->_getParam('file');
// データベースからfileデータ取得
$data = $this->_dbtable->get($info);
// ヘッダの設定
$this->getResponse()->setHeader('Content-Type', 'application/octet-stream');
$this->getResponse()->setHeader('Content-Disposition', 'attachment; filename=' . $data['filename']);
$this->getResponse()->setHeader('Content-Length', $data['filesize']);
// ヘッダの送信
$this->getResponse()->sendHeaders();
// 出力バッファを無効にする。
ob_end_clean();
// 再度バッファリングを有効にする場合は記述する。
//ob_start(null, 81920);
echo base64_decode($data['filedata']);
}
【view】
< img src="< ?php echo $this->basePath ?>controller/display/file/fileid" name="画像" width="300" height="200">
表示に関してはこんな感じ。
【controller】
public function displayAction()
{
//レイアウトを無効にする
$this->_helper->layout->disableLayout();
// viewを使用しない
$this->_helper->viewRenderer->setNoRender();
// 出力のバッファリングを有効にする
ob_start();
// POSTからデータを取得する
$info = array();
$info['fileid'] = $this->_getParam('file');
// データベースからfileデータ取得
$data = $this->_dbtable->get($info);
// ヘッダの設定
$this->getResponse()->setHeader('Content-Type', 'application/octet-stream');
$this->getResponse()->setHeader('Content-Disposition', 'attachment; filename=' . $data['filename']);
$this->getResponse()->setHeader('Content-Length', $data['filesize']);
// ヘッダの送信
$this->getResponse()->sendHeaders();
// 出力バッファを無効にする。
ob_end_clean();
// 再度バッファリングを有効にする場合は記述する。
//ob_start(null, 81920);
echo base64_decode($data['filedata']);
}
【view】
< img src="< ?php echo $this->basePath ?>controller/display/file/fileid" name="画像" width="300" height="200">
表示に関してはこんな感じ。
mysqlに画像ファイルを格納する(1)
zend freamworkでmysqlに画像を格納する方法
テーブルの列の定義に下記を追加
fileid varchar(255) // ファイルID
filename varchar(255) // ファイル名称
filetype varchar(255) // ファイル種類
filesize varchar(255) // ファイルサイズ
filedata longblob // ファイルの中身
【controllerモジュール】
// 下記モジュールを呼び出す
require_once 'Zend/File/Transfer/Adapter/Http.php';
require_once 'Zend/File/Transfer.php';
public function example()
{
try {
// アップロードファイルのデータチェック
$upload = new Zend_File_Transfer();
// ファイルがアップロードされなかったときにバリデータは何もしない。
$upload->setOptions(array('ignoreNoFile' => true));
// SI記法を無効にし、数値のみを返すようにします
$upload->setOptions(array('useByteString' => false));
$errMessage = array();
$j = 0;
// pictureのバリデータチェック
$upload->addValidator('Count', false, array('min' => '1', 'max' => '1'), 'picture');
if (!$upload->isValid('picture')) {
$errMessage[$j++] = '画像がアップロードされておりません。';
} else {
$upload->addValidator('Size', false, 1024 * 1024 * 1, 'picture');
if (!$upload->isValid('picture')) {
$errMessage[$j++] = '画像のファイルサイズが大きすぎます。';
} else {
$upload->addValidator('MimeType', false, 'image', 'picture');
if (!$upload->isValid('picture')) {
$errMessage[$j++] = '画像は画像ファイルではありません。';
}
}
}
// 画像の保存先
$upload->setDestination('./tmp');
$upload->receive('picture')
// 以下画像登録
$data = array();
$data['fileid'] = md5(uniqid(rand(), true));
$data['filename'] = basename($upload->getFileName(picture));
$data['filetype'] = $upload->getMimeType(picture);
$data['filesize'] = $upload->getFileSize(picture);
$data['filedata'] = base64_encode(file_get_contents($upload->getFileName(picture)));
// データベースに登録する
$this->_dbtable->insert('tablename', $data);
} catch (Zend_File_Transfer_Exception $e) {
}
}
【view】
< ?php echo $this->formFile('picture'); ?>
登録に関してはこんな感じ。
テーブルの列の定義に下記を追加
fileid varchar(255) // ファイルID
filename varchar(255) // ファイル名称
filetype varchar(255) // ファイル種類
filesize varchar(255) // ファイルサイズ
filedata longblob // ファイルの中身
【controllerモジュール】
// 下記モジュールを呼び出す
require_once 'Zend/File/Transfer/Adapter/Http.php';
require_once 'Zend/File/Transfer.php';
public function example()
{
try {
// アップロードファイルのデータチェック
$upload = new Zend_File_Transfer();
// ファイルがアップロードされなかったときにバリデータは何もしない。
$upload->setOptions(array('ignoreNoFile' => true));
// SI記法を無効にし、数値のみを返すようにします
$upload->setOptions(array('useByteString' => false));
$errMessage = array();
$j = 0;
// pictureのバリデータチェック
$upload->addValidator('Count', false, array('min' => '1', 'max' => '1'), 'picture');
if (!$upload->isValid('picture')) {
$errMessage[$j++] = '画像がアップロードされておりません。';
} else {
$upload->addValidator('Size', false, 1024 * 1024 * 1, 'picture');
if (!$upload->isValid('picture')) {
$errMessage[$j++] = '画像のファイルサイズが大きすぎます。';
} else {
$upload->addValidator('MimeType', false, 'image', 'picture');
if (!$upload->isValid('picture')) {
$errMessage[$j++] = '画像は画像ファイルではありません。';
}
}
}
// 画像の保存先
$upload->setDestination('./tmp');
$upload->receive('picture')
// 以下画像登録
$data = array();
$data['fileid'] = md5(uniqid(rand(), true));
$data['filename'] = basename($upload->getFileName(picture));
$data['filetype'] = $upload->getMimeType(picture);
$data['filesize'] = $upload->getFileSize(picture);
$data['filedata'] = base64_encode(file_get_contents($upload->getFileName(picture)));
// データベースに登録する
$this->_dbtable->insert('tablename', $data);
} catch (Zend_File_Transfer_Exception $e) {
}
}
【view】
< ?php echo $this->formFile('picture'); ?>
登録に関してはこんな感じ。
mcrypt_module_openをインストール
暗号化を使おうと思ったらエラーになった。
Fatal error: Call to undefined function mcrypt_module_open()
mcrypt_module_open()がないよというエラーなので、追加でインストールして対処します。
CentOS6.6環境では下記のやり方でインストールできます。
# yum --enablerepo=rpmforge install php-mcrypt
後はhttpdの再起動を実行して完了です。
/etc/rc.d/init.d/httpd restart
エラーがでなくなり、暗号化もできたことを確認して終了。
Fatal error: Call to undefined function mcrypt_module_open()
mcrypt_module_open()がないよというエラーなので、追加でインストールして対処します。
CentOS6.6環境では下記のやり方でインストールできます。
# yum --enablerepo=rpmforge install php-mcrypt
後はhttpdの再起動を実行して完了です。
/etc/rc.d/init.d/httpd restart
エラーがでなくなり、暗号化もできたことを確認して終了。
dojoを利用して郵便番号の自動補完を実現する
郵便番号のjson形式を下記からダウンロードする。
http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html#download
/home/username/application/lib/に配置する。
dojoファイルを下記からダウンロードする。
http://dojotoolkit.org/download/
/home/username/public_html/js/に配置する。
【controllerファイルの設定】
【scriptファイルの設定】
これで多分OKです。
http://www.kawa.net/works/ajax/ajaxzip2/ajaxzip2.html#download
/home/username/application/lib/に配置する。
dojoファイルを下記からダウンロードする。
http://dojotoolkit.org/download/
/home/username/public_html/js/に配置する。
【controllerファイルの設定】
// 先頭あたりに追記 下記ファイルをロードする require_once 'Zend/Json.php'; require_once 'Zend/Dojo.php'; public function init() { // 追記 // Ajax Zend_Dojo::enableView($this->view); $this->view->dojo()->setLocalPath($this->_config->basePath . 'js/dojo/dojo/dojo.js'); $this->view->dojo()->setDjConfigOption('isDebug', false); } // アクション追記 public function ajaxAction() { //レイアウトを無効にする $this->_helper->layout->disableLayout(); // viewを使用しない $this->_helper->viewRenderer->setNoRender(); // parameter取得 $val = $this->getRequest()->getParam('val'); $val2 = $this->getRequest()->getParam('val2'); if (strlen($val) != 3) { // 空の文字列を送信 echo ''; return; } if (strlen($val2) != 4) { // 空の文字列を送信 echo ''; return; } // JSONデータファイル読み込み $data = file_get_contents('../application/lib/jsonzip/zip-' . $val . '.json', 0); $tmpStr = $val . $val2; $position = strpos($data, $tmpStr); if (!$position) { // 空の文字列を送信 echo ''; } else { // JSONデータ送信 echo $data; } }
【scriptファイルの設定】
// header部分 // body部分 // 都道府県 // 都道町村 // 町域(大字)〜番地
これで多分OKです。