オカムラ: バロンチェアの背もたれワイヤーが壊れたので交換した

オカムラが販売しているOAチェアのバロンを使用しているのですが、背もたれのワイヤーが壊れてしまい、リクライニングできなくなったので修理してみました。

修理の方法


オカムラ製品の修理は、訪問での修理と、パーツの取り寄せが有ります。
修理を担当しているのはオカムラ サポートアンドサービスという会社が担当しているようです。

出張修理だと、出張代が9,000円程度かかるらしいので、今回はパーツの取り寄せで対応してみました。

パーツの注文


下記のサポートページから、修理部品の注文FAXシートが手に入ります。

サポートのページ http://osas.okamura.co.jp/support/repair.html
注文シートのPDF http://osas.okamura.co.jp/support/pdf/after_touhoku.pdf

ダウンロードしたPDFを印刷して、必要事項を書き込みFAXで送付すればよいです。

…とは言っても、注文したいパーツの品番も分からなければ、部品代も全く分からないので、注文シートを書くこと自体ができないかと思います。下記のお問い合わせフォームから部品を注文したい旨を書いて送ると、品番や価格を教えてもらえました。
https://www.okamura.co.jp/okamura/cgi-bin/inquiry/form.cgi?div=S1

FAXで注文票を送ると、納期や正式な見積価格が”FAXで”返信されてきました。再度、正式注文のFAXを送り返すと、注文は終わりです。費用は代引きのみ対応っぽいです。

ちなみに、今回注文した商品は以下の通りで、消費税込みで3024円でした。

A13538X バロンチェア用リクライニングレバー セット 2000円
送料+代引き手数料 800円

デキる人は頼み方がうまい

商品の交換


1週間ほどして、注文した部品が届きました。


中身はこのような感じです(画像をクリックで拡大します)。


商品です。問い合わせたときの情報によるとワイヤーだけ購入することはできず、ワイヤーとレバーのセットで1つの部品とのことでした。


まず、壊れてしまったレバーを外します。
赤枠の部分がツメになっていて止まっているので押しながら外します。
裏面側にもツメがあるのですが両方同時に押すのはかなり難しく、少し傾けながら片方づつ順に押すと外しやすいです。


本体から無事外れた状態です。
結構固いですが、うまく片方づつツメを外していけば、道具を使わずに一人でも作業可能でした。
(外せるか不安な場合は、部品の注文前に予め、試してみても良いかもしれません)


壊れた部品を取り出すとこんな状態でした。
本体側ワイヤーの被覆が取れてしまい、レバーを引いても意味がない状態になってました。


付けるのは簡単で、外すときの反対の作業をすればよいだけです。

家具を修理する本

書籍「サーバーレスシングルページアプリケーション」をWindows環境で実行する(sspaコマンド)

オライリーから出版されている書籍、サーバーレスシングルページアプリケーションでは、単体テストやサーバへのアクセスなどをsspaというコマンド経由で操作するように説明されています。

sspaコマンドな本書専用のコマンドですが、シンプルな内容で見れば何を行っているか直ぐに理解できるような内容です。ですが、基本的にLinuxやMacOS環境などbashが動く環境で実行するように説明が行われています。

今回は、サーバーレスシングルページアプリケーションの書籍の内容をWindows環境で動作させたのでその時の手順をメモしておきます。Windows10 Professionalが入ったPCで動作確認を行っています。



bashが動く環境の構築


Windows10の場合、2016年にリリースされたAnniversary Update以降、”Bash on Ubuntu on Windows”というbash環境(Linuxサブシステム)が提供されているので、これをインストールします。

※手順は簡単で、ネットにも沢山の情報があるので省略します。

Pythonのインストール


sspaコマンドの内部でpythonを使用しているため、pyhonが動く環境をインストールします。

Windowsでのpython実行環境はAnacondaというものが有名です。これは、python本体であるpython.exeに加えて、よく利用されているライブラリが一緒に同梱されたパッケージ(ディストリビューション)です。機械学習のライブラリで有名なTensorFlowなどでもAnacondaを使った場合のセットアップが掲載されているくらい、有名な物なので、これを入れておけば安心です。

下記のサイトからダウンロードしてインストールします。
https://www.continuum.io/downloads

手元の環境は、下記のバージョンが入っていますが、Python3.x系の最新のものを入れておけば良いです。

> python --version
Python 3.5.2 :: Anaconda 4.2.0 (64-bit)

gitのインストール


本書に沿って実習するのに、gitは必須ではありませんが、使用したことがなければgit for Windows(https://git-for-windows.github.io/)を入れておくと良いです。

gitを使いたくない場合、p11のgit cloneコマンドで”benrady/learnjs”をフォークする部分は、下記の流れでファイルを取得できます。

・下記のページにアクセスする
https://github.com/benrady/learnjs

・Clone or downloadボタンから”download ZIP”をクリックし、取得したzipファイルを展開すれば良いです。


sspaコマンドの実行


ここまで準備したら、Windowsのコマンドプロンプトからsspaコマンドを実行可能です。

sspaコマンドがあるフォルダに移動して、下記のコマンドを順に打てば、sspaコマンドのヘルプが表示されます。

bash
./sspa

“./sspa server”コマンドを実行すると、ファイアーウォールの警告ダイアログが出るかもしれませんが、”アクセスを許可する”をクリックすれば良いです。


その後自動でブラウザが開き、http://localhost:9292/のアドレスでIt worksが表示されればOKです。


P16のAWS CLIをセットアップ


P16では、下記のコマンドを実行するよう指示されます

$ sudo easy_install pip 
$ sudo pip install awscli

Windows10 + anaconda環境だと、下記の作業で対応できます。

  1. コマンドプロンプトを、管理者として実行(bash環境でなくて良い)
  2. 下記のコマンドを入力

> pip install awscli

その後の’aws configure’を実行するところでは、コマンドプロンプトから下記のコマンドを入力します。
(bash環境だとエラーが出ます)

> "C:\Program Files\Anaconda3\Scripts\aws" configure

作成したcredentialsファイルは下記の場所に作成されます。

C:\Users\%USERNAME%\.aws\credentials





サーバーレスシングルページアプリケーション

[Python]PHPのimplode, explodeに相当する関数

PythonでPHPのimplodeやexplodeに相当する処理を行う方法です。

それぞれjoinと、split関数を使用することで同等の処理が行えます。

implode相当の処理

s = ['a', 'b', 'c']
out_data =  ' '.join(s)

print( out_data )     # 'a b c'

explode相当の処理

s = "a,b,c"
out_data = s.split(',')

print( out_data )     # ['a', 'b', 'c']

vagrant up実行で,SYSTEM_SERVICE_EXCEPTIONでブルースクリーンになる時

Vagrantを使用しているときvagrant upコマンドを実行するとにWindowsがSYSTEM_SERVICE_EXCEPTIONブルースクリーンになる場合があります。このときの可能性の一つとして、Hyper-Vとの設定が競合している(Hyper-Vが有効化されている)可能性があります。

Hyper-V機能の無効化方法


Hyper-V機能は、以下の手順で無効化できます。

  • コントロールパネルから、”プログラムと機能”を選択します。
  • メニューの”Hyper-V”にチェックが入っていたら、チェックを外します。
  • PCを再起動します。
  • Hyper-V機能が問題だった場合、再度vagrant upコマンドを実行すれば、正しく起動してくれます。

次回起動時にVagrant corrupted index… エラーが出る時の対処


ブルースクリーンで異常終了した場合、次回vagrant upした時に下記のエラーが出る場合があります。

The machine index which stores all required information about
running Vagrant environments has become corrupt. This is usually
caused by external tampering of the Vagrant data folder.

Vagrant cannot manage any Vagrant environments if the index is
corrupt. Please attempt to manually correct it. If you are unable
to manually correct it, then remove the data file at the path below.
This will leave all existing Vagrant environments "orphaned" and
they'll have to be destroyed manually.

Path: C:/Users/xxx/.vagrant.d/data/machine-index/index

これは、前回起動に失敗したときに、ロックファイルが残っているためです。

PCの再起動直後など、vagrantが起動していないことが明らかな場合は、指定されたフォルダ(C:/Users/xxx/.vagrant.d/data/machine-index/index)の下にある、indexとindex.lockファイルを削除してから、再度vagrant upすればOKです。

[cmder]右クリックメニューに”Cmder Here”を追加する方法

Windowで使用できる便利なコマンドラインツールであるcmderがあります。
cmd.exeだとShift+右クリックで、”コマンドラインをここで開く”メニューが出るのですが、Cmderで同様に右クリックメニューにCmder Hereを追加する方法を説明します。

Cmderで右クリックメニューに”Cmder Here”を追加する


コマンドラインを、管理者モードで起動します。

cmder.exeがあるフォルダに移動します。

下記のコマンドで登録します。

.\cmder.exe /REGISTER ALL

コマンドを実行しても、以下のように何も出力されませんが…


右クリックメニューには、たしかにCmder Hereが追加されています。


元に戻したい場合は、下記のコマンドで削除可能です。

.\cmder.exe /UNREGISTER ALL

[PHP]Laravelからtwitter bootstrapを使う方法

PHPからbootstrapを使用する場合、bootstrapのサイトからcss/jsをダウンロードしなくても、composer経由でダウンロードすることが可能です。
bootstrapはベンダー名がtwbsで管理されているので、具体的には以下のコマンドでダウンロード可能です。

composer require twbs/bootstrap

この場合、ダウンロードされたファイルはvendorの下に入るので、DocumentRootから見えない場所に設置されてしまいます。Laravelフレームワークを使用している場合、artisan asset:publishコマンドを使用することで、Webサーバから見える場所に設置することが可能です。

php artisan asset:publish --path="vendor/twitter/bootstrap/bootstrap/css" bootstrap/css
php artisan asset:publish --path="vendor/twitter/bootstrap/bootstrap/js" bootstrap/js

[PHP7.1]タイプヒンティングで関数の戻り値にvoidを指定したときのふるまい

PHP7.1では、タイプヒンティングで関数の戻り値で値を返さないことを明示するために、voidの指定が可能です。
voidを指定したときに、正しく実行できるコード、エラーが出るコードを確認してみました。

下記はOKパターンです。

<?php

// OK: return文に戻り値を指定しないコードは正しく実行できる
function foo_ok2() : void
{
    return;
}


// OK: return文自体を書かなくてもよい
function foo_ok1() : void
{
    // do nothing.
}

一方、下記コードはNGです。

// NG: "void"のタイプヒンティングでは、空文字列を返せない
function foo_ng($option) : void
{
    return "";
}

// NG: "void"のタイプヒンティングでは、nullを返せない
function foo_ng2($option) : void
{
    return null;
}

NGパターンのコードを書いた場合、実行時に下記のエラーが出力されます。

PHP Fatal error:  
 A void function must not return a value

PHP Fatal error: 
 A void function must not return a value 
 (did you mean "return;" instead of "return null;"?)

[PHP]関数の戻り値にnull値の許容をタイプヒンティングさせる方法

PHP7では、関数の戻り値の方を制限するためのタイプヒンティング機能が追加されました。
PHP7.1では、このタイプヒンティングに対して、さらに”指定された型、もしくは、null”が返されること強制する、null許容型のタイプヒンティング機能が追加されました。

例えばstring or nullのreturnを強制したい場合、下記サンプルコードのように”?string”先頭へ”?”を付ければOKです。

<?php
function foo($option) : ?string
{
    if ($option == 1) {
        return "hello";
    }
    return null;
}

echo foo(1);
echo foo(0);

[PHP]無名関数を定義して、即時実行したい場合は?

javascriptでは、オブジェクトの名前空間の問題により、無名関数を作ったうえで、作成した無名関数を即時実行したい場合が多くあります。
phpで同様の事を行いたい場合、どのような記述を行えばよいでしょうか?

php7.0以降の場合は、javascriptと同様に下記のコードで実行することもできます

<?php
(function() {
    echo 'hello world'; 
})();

php5.xのバージョンしか使えない場合は、上記のコードほどシンプルではありませんが、下記のコードで無名関数を即時実行可能です。

<?php
call_user_func(function() { 
    echo 'hello world'; 
});

上記のコードはphp7.0以降でも動作するため、古いバージョンのphpサポートも必要なライブラリを作っている場合などは、後者の方が良いかもしれません。

[PHP]PHP7実行時、VCRUNTIME140.dll is missingエラーが出るとき

windowsでphp7を実行したとき、下記のエラーが出る場合があります。

Unable to start the program as VCRUNTIME140.dll is missing on your computer. 
Try reinstalling the program to fix this problem.

無いと出力されているVCRUNTIME140.dllですが、これはVisual C++ Runtime14.0の意味です。
ダウンロードページを見ると、下記の通りたしかにランタイムが必要との記載があります

VC11, VC14 & VC15
More recent versions of PHP are built with VC11, VC14 or VC15 (Visual Studio 2008, 2012 or 2015 compiler respectively)
– and include improvements in performance and stability.
– The VC14 builds require to have the Visual C++ Redistributable for Visual Studio 2015 x86 or x64 installed


該当のランタイムは、Microsoftのサイトより無料でダウンロード可能です。下記のリンクからダウンロードとインストールを行ってみて下さい。
Visual Studio 2015 の Visual C++ 再頒布可能パッケージ

https://www.microsoft.com/ja-JP/download/details.aspx?id=48145

[PHP]composerのインストールでUnable to find the wrapper “https”エラー

PHPでcomposerをインストールしようとしたとき、以下のようにUnable to find the wrapper "https"エラーが出る場合があります。

>php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
Warning: copy(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP? in Command line code on line 1
Warning: copy(https://getcomposer.org/installer): failed to open stream: No such file or directory in Command line code on line 1

この理由として、php.iniでhttpsが実行できない設定になっている可能性があります。

対処法は、php.iniを開きphp_opensslのextensionがコメントアウトされている場合は、コメントを外してください。
php.ini自体がない場合は、php.ini-developmentをコピーしてphp.iniを作ります。

#extension=php_openssl.* 
↓
extension=php_openssl.* 

また、phpのインストールディレクトリをデフォルトの位置(windowsだとc:\php)から変更している場合は、上記に加えてextension_dirの設定も必要になる場合があります。

; extension_dir = "ext"
↓
extension_dir = "C:\path\to\php\php-7.1.3\ext"

[WordPress] while( have_post() )ループでループカウンタの取得方法は?

WordPressの記事一覧をループしているときに、最初の1件目のみ処理を変えたいときがあります。
このような場合は、$wp_queryオブジェクトが持っているcurrent_post変数に、ループカウンタが保存されていますので、これを利用すると便利です。
また、post_count変数に件数が保存されているので、post_countを比較することで最後の時のみ特定の処理を行うことができます。

current_post変数は0から始まることに注意が必要です。

具体的には、have_posts()のループ内に、下記のような感じで判定式を書けばOKです。

if( have_posts() ) {
    while ( have_posts() ) {
        the_post();
        if ( $wp_query->current_post === 0 ) {
            // 最初の記事の時の処理
        }
        if ( $wp_query->current_post === $wp_query->post_count -1 ) {
            // 最後の記事の時の処理
        }
        ...
    }
}

XDebugを有効化したときのメモ

chromeにextensionを追加する


  • インストール先
    Xdebug helper

  • インストールされたextensionのアイコンを右クリック -> オプションを選択する
    IDE keyの項目を、使っている開発環境に合わせる


PHPの環境を作る



[PHP_XDEBUG]
report_zend_debug = 0
zend_extension = "C:\home\php\xdebug\php_xdebug-2.5.0-5.6-vc11-x86_64.dll"
xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

  • 設定が行えたか確認する

php -r "phpinfo();" | grep -i debug

ゴルフ初心者が室内練習でお勧めのグッズはコレ(DAIYA:スイング525)



ゴルフがうまくなりたくて良い練習道具を探していたのですが、フォームの練習にピッタリだと思ったので購入したのがダイヤというメーカが作っているスイング525という練習器具です。

ずっと拒んでいたゴルフをどうしてもやらなければいけなくなり、仕方なく始めたのですが、ゴルフスコアがなかなか良くなりませんでした。自分でもフォームが悪い事は分かっていたのですが、どうしたら良いのか分からずにいました。スウィングフォームで検索をしているうちにこの商品にたどり着きました。

室内練習が出来て便利!


部屋の中で練習できる道具を探していたので、自分にピッタリでした。
やはり、思い立った時に家の中で練習できるのは理想的です。また、商品レビューでもとても良い評価だったので、迷うことなく購入を決めました。

一人での練習は、練習結果のフィードバックが大事


商品の説明で正しいフォームを音が導いてくれるとの事でしたが、使ってみてその良さが良く分かりました。間違ったフォームだと変な場所で音が鳴るので直ぐに分かります。今までの自分のフォームは間違っていたのだと再認識しました。やはり音が鳴るのがポイントでとても分かりやすいのです。



 

[FuelPHP]複数DBへ接続時、エラー”Database type not defined in”が出るときにチェックする事

FuelPHPでは、DBへの接続定義を, fuel/app/config/$ENV/db.phpで管理されています。

インストール直後の開発環境では、以下のようになってます。

return array(
    'default' => array(
        'connection'  => array(
            'dsn'        => 'mysql:host=localhost;dbname=fuel_dev',
            'username'   => 'root',
            'password'   => 'root',
        ),
    ),
);

これを、複数DBへの接続対応するために、例えば’default2’を定義したうえで…

return array(
    'default' => array(
        'connection'  => array(
            'dsn'        => 'mysql:host=localhost;dbname=fuel_dev',
            'username'   => 'root',
            'password'   => 'root',
        ),
    ),

    'default2' => array(
        'connection'  => array(
            'dsn'        => 'mysql:host=localhost;dbname=fuel_dev2',
            'username'   => 'root',
            'password'   => 'root',
        ),
    ),    
);

以下の形でSQLを発行してもエラーになってしまいます。

$sql = 'select * from tbl_test';
\DB::query($sql)->execute('default2');

出力されるエラーは下記の通りです。

Fuel\Core\FuelException [ Error ]:
Database type not defined in "default2" configuration or 
"default2" configuration does not exist

fuel/core/classes/database/connection.php @ line 72

上記のエラーが発生する理由は、default以外のdb定義をする場合にはtypeの設定が必要なためです。
以下のような感じで'type' => 'pdo',の指定を追加すれば、エラーが解消されました。

return array(
    'default' => array(
        'connection'  => array(
            'dsn'        => 'mysql:host=localhost;dbname=fuel_dev',
            'username'   => 'root',
            'password'   => 'root',
        ),
    ),
    'default2' => array(
        'type' => 'pdo',
        'connection'  => array(
            'dsn'        => 'mysql:host=localhost;dbname=fuel_dev2',
            'username'   => 'root',
            'password'   => 'root',
        ),
    ),    
);

上記のエラーが出ていた、fuel/core/classes/database/connection.phpの72行目を見ると、確かにtypeの定義がない時にエラーになっています。

if ( ! isset($config['type']))
{
    throw new \FuelException('Database type not defined in "'.$name.'" configuration or "'.$name.'" configuration does not exist');
}

それでは、defaultの時のtypeはどこで指定されているのでしょうか?
調べてみると、fuel\core\config\db.phpで指定が行われているようでした。
ここに、DB検索を実行時にデータソースを指定しなければdefaultの定義が有効になる事と、default定義のtypeはpdoであることが記載されています。

return array(

    /*
     * If you don't specify a DB configuration name when you create a connection
     * the configuration to be used will be determined by the 'active' value
     */
    'active' => 'default',

    /**
     * Base PDO config
     */
    'default' => array(
        'type'        => 'pdo',
        'connection'  => array(
            'dsn'        => '',
            'hostname'   => '',
            'username'   => null,
            'password'   => null,
            'database'   => '',
            'persistent' => false,
            'compress'   => false,
        ),
        'identifier'   => '`',
        'table_prefix' => '',
        'charset'      => 'utf8',
        'collation'    => false,
        'enable_cache' => true,
        'profiling'    => false,
        'readonly'     => false,
    ),
    ...

[FuelPHP]Windowsだと問題ないのにLinux上だとClass not foundエラーが出るときにチェックすること

Windowだとクラスのロードが問題なく行えるのに、Linux上だとクラスのロードでエラーになる場合は、ファイル名の大文字・小文字のルールが間違っている可能性が高い(主に開発環境はWindowsで本番環境がLinuxだと気づきにくい)。

例えば、Model/ItemMst.phpという名前でモデルを作っている場合、Windowsだとファイル名の大文字小文字を無視するのでphpファイルの読み込みが行えるが、LinuxだとModel/itemmst.phpを読みに行こうとしてエラーになってしまう。

newで指定されだクラス名に対して、実際に何のファイル名でクラスローダがロードを試みているか確認したい場合は、Autoloader::load()の最後当たりにある下記の処理にデバッグログを差し込んでみるとわかりやすい。

[fuel\core\classes\autoloader.php]


class Autoloader
{
    public static function load($class)
    {
        ...

        if ( ! $loaded)
        {
            $path = APPPATH.'classes'.DS.static::class_to_path($class);
error_log("load class[{$class}] -> path={$path}\n" , 3, "/path/to/log.txt");
            if (is_file($path))
            {
                static::init_class($class, $path);
                $loaded = true;
            }
        }


FuelPHPでのログ出力はLogクラスを利用して、Log::info(“message”);などで出力できるが、上記の処理はクラスローダ処理なので、Logクラスを使えないことに注意が必要。もし、事情期のログ出力でLogクラスを使用すると、Logクラスの生成でさらにload()メソッドが呼ばれ…、となり想定しないふるまいになってしまう。

[php]phpQueryをcomposer経由でインストールする

PHPからwebページのスクレイピングを行うための有名なライブラリにphpQueryがあります。
phpQueryを使用すると、htmlに対してjQueryのようなセレクタで、取得したいタグの検索などが簡単に行えるので便利です。

今回はこのphpQueryをcomposer経由でインストールしたうえで、簡単な動作確認を行ってみました。

作業手順


phpQueryパッケージをインストールする


まず、composer self-updateコマンドでcomposer自身のアップデートを行ったうえで、requireコマンドを使用してphpqueryパッケージのインストールを行います。

composer self-update
composer require electrolinux/phpquery

composer reuireでインストールができたら、composer infoコマンドで正しくインストールできたか確認します。今回試した時点ではver0.9.6が最新のバージョンでした。

> composer info electrolinux/phpquery
You are running Composer with SSL/TLS protection disabled.
name     : electrolinux/phpquery
descrip. : phpQuery is a server-side, chainable, CSS3 selector driven Document Object Model (DOM) API based on jQuery JavaScript Library
keywords :
versions : * 0.9.6
type     : library
license  : MIT License (MIT) (OSI approved) https://spdx.org/licenses/MIT.html#licenseText
source   : [git] https://github.com/electrolinux/phpquery.git 6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a
dist     : [zip] https://api.github.com/repos/electrolinux/phpquery/zipball/6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a 6cb8afcfe8cd4ce45f2f8c27d561383037c27a3a

names    : electrolinux/phpquery

インストールしたパッケージの動作確認を行う


動作確認のために簡単なプログラムを作ってみます。
なんでもよいのですが、今回はcomposerのパッケージが検索できるサイトから、名前に”helloworld”を含むパッケージの一覧を取得してみます。

一度ブラウザでアクセスしてみるとわかるのですがhttps://packagist.org/search/のページへ、クエリストリング?q=helloworldを付与したURLで検索が結果が表示され、各パッケージのタイトルはh4タグの中に記載されています。

<?php
require 'fuel/vendor/autoload.php';

// composerのパッケージ一覧から、名前に"helloworld"を含むパッケージを取得
$htmlStr = file_get_contents("https://packagist.org/search/?q=helloworld");

// htmlテキストをスクレイピングして、h4タグの一覧を取得
$dom = phpQuery::newDocument($htmlStr);
$titles = pq($dom)->find("h4");

// 取得したすべてのh4タグタイトルを画面に出力
foreach( $titles as $title ) {
    echo trim( pq($title)->text() ) . "\n";
}

上記のプログラムを実行してみた結果が以下の通りです。
想定通り、helloworldな名前を持つパッケージたちが取得できました。

> php test_phpquery.php

reps_demo/helloworld
brooklab/helloworld
abbert/helloworld
dnconcept/hello-world
nsdhami/hello-world
bagwaa/hello-world
vsonx/hello-world
hurad/hello-world
vdrizheruk/hello-world
eric-clinton/helloworld
wyanez/zf2-helloworld
mshige1979/helloworld
joomlatools/com_helloworld
digitalformula/hello-world
donut/hello_world

[FuelPHP] composer updateでfuelphp/upload 2.0.6のアップデートエラーが出るとき

FuelPHPのフレームワーク使用時にcomposer updateを実行した際、下記のエラーがでてパッケージをアップデートできない場合があります。

> composer update

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - fuelphp/upload 2.0.6 requires ext-fileinfo * -> the requested PHP extension fileinfo is missing from your system.
    - fuelphp/upload 2.0.6 requires ext-fileinfo * -> the requested PHP extension fileinfo is missing from your system.
    - Installation request for fuelphp/upload 2.0.6 -> satisfiable by fuelphp/upload[2.0.6].

  To enable extensions, verify that they are enabled in your .ini files:
    - C:\path\to\php.ini
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.

上記のエラーはphp自体の環境でphp_fileinfoのエクステンションが有効になっていない場合に出力されるエラーです。この場合は、エラーメッセージにある通りphp.iniの下記設定を変更することでcomposer updateが可能になります。

;extension=php_fileinfo.dll



extension=php_fileinfo.dll

[php]composer self-updateでエラー[Composer\Downloader\TransportException]が出るとき

composerを使用していてcomposer self-updateコマンド実行時に下記のエラーが出る場合があります

[Composer\Downloader\TransportException]
Your configuration does not allow connections to http://getcomposer.org/versions. 
See https://getcomposer.org/doc/06-config.md#secure-http for details.

このエラーが出る理由ですが、composerはファイルのダウンロードをSSL対応したサイトからのみ許容しているのですが、SSL暗号化がされていないサイトへのアクセスが検出されたためです。本来であればSSL経由でアクセス可能なように対処すべきですが、一時的にこのチェックをOFFにして動作させたい場合もあります。

このような場合、下記のコマンドを実行してsecure-httpの設定値をfalseにすれば、self-updateを実行できます。

composer config --global -- secure-http false

設定された内容は、下記のコマンドでチェック可能です。

composer config --list

[php]composer self-updateでエラー[required for SSL/TLS protection]が出るときの対処法

PHPでcomposerのアップデートを行った時、opensslのライブラリでSSL/TLS protectionエラーが出る場合があります。※下記の例の”composer self-update”は、windowsの場合は環境によって”php.exe composer.phar self-update”になる場合もあります。

> php.exe composer.phar self-update

[RuntimeException] 
The openssl extension is required for SSL/TLS protection 
but is not available. 

If you can not enable the openssl extension, 
you can disable this error, at your own risk, 
by setting the 'disable-tls' option to true.

このエラーに対して一時的にSSLのチェックを外したい場合は、下記のコマンドでdisable-tlsのフラグを立てればOKです。

composer config --global -- disable-tls true

上記のコマンドを実行すると、下記のフォルダに設定内容が登録されます
(configの場所はcomposer config --list -vvvでverbose出力すれば確認できます)

C:\Users\ユーザ名\AppData\Roaming\Composer\config.json

設定内容がconfigにセットされているかは、下記のコマンドで確認できます。

composer config --list