Fatal error: Cannot redeclare class Ethna in ... Ethna.php エラーの対処法

Ethnaコマンドを使おうとすると、こんなエラーが出ることがあります。
私の場合は必ずこれが出ます。
これが出ると、add-actionとか何もできなくなって一瞬憂鬱になりますが、簡単に回避できるのでご安心を。

エラー

>ethna add-action ...なんとかかんとか
Fatal error: Cannot redeclare class Ethna in ... Ethna.php on line 424 

原因

Ethnaのライブラリ一式が、同じコンピュータ内に2重で存在している。
私の場合、
  • PEARチャンネルでインストールしたEthna (C:\php5\PEAR\Ethnaみたいな場所にある)
  • 既に作ったプロジェクトのlibフォルダ内のEthna (C:\www\myproject\lib\Ethna)
という形で、Ethnaのソースコードが複数の場所に存在していたのが原因のようです。

対処法

ethnaコマンドの実体であるethna.batを書き換えたら動きました。
環境によって違うので、あくまでも参考ということでお願いします。

"rem"というのはコメントアウトのことです。(phpでの"//"に相当)

@echo off

rem
rem   ethna.bat
rem
rem   simple command line gateway
rem
rem   $Id: ethna.bat 457 2007-02-07 11:14:39Z ichii386 $
rem

if "%OS%"=="Windows_NT" @setlocal

if NOT "%PHP_PEAR_INSTALL_DIR%" == "" (
rem set DEFAULT_ETHNA_HOME= %PHP_PEAR_INSTALL_DIR%\Ethna
set DEFAULT_ETHNA_HOME=.\lib\Ethna
) ELSE (
set DEFAULT_ETHNA_HOME=%~dp0
)

goto init
goto cleanup

:init

if "%ETHNA_HOME%" == "" set ETHNA_HOME=%DEFAULT_ETHNA_HOME%
set DEFAULT_ETHNA_HOME=

if "%PHP_COMMAND%" == "" goto no_phpcommand
if "%PHP_CLASSPATH%" == "" goto set_classpath

goto run
goto cleanup

:run
rem IF EXIST "C:\php5\pear\Ethna" (
rem %PHP_COMMAND% -d html_errors=off -qC "C:\php5\pear\Ethna\bin\ethna_handle.php" %1 %2 %3 %4 %5 %6 %7 %8 %9
rem ) ELSE (
%PHP_COMMAND% -d html_errors=off -qC "%ETHNA_HOME%\bin\ethna_handle.php" %1 %2 %3 %4 %5 %6 %7 %8 %9
rem )
goto cleanup

:no_phpcommand
set PHP_COMMAND=php.exe
goto init

:set_classpath
set PHP_CLASSPATH=%ETHNA_HOME%\class
goto init

:cleanup
if "%OS%"=="Windows_NT" @endlocal
REM pause
ポイントは、"C:\php5\PEAR\Ethna"のような場所を見に行かないようにすること、"C:\www\myproject\lib\Ethna\bin\ethna_handle.php"を起動するように強制させることです。

なお、この書き方の場合は、必ずコマンドプロンプト上のカレントディレクトリを"C:\www\myproject\"にしてからEthnaコマンドを叩く必要があります。(ちょっと不便)
なぜこのようにしてるかというと、PC内にEthnaプロジェクトが3つも4つもあるからです。

どんだけEthna漬けやねん。。
カテゴリ: