修正する

修正する

yiiシェルからコンソールコマンドを実行したいです。protected/yiicコンソールでこれを実行しましたが失敗しました。-bash: yiic: command not found

問題は何ですか?私のシェルのコマンドと応答を確認してください。

ls -l
...
-rw-r-----  1 srv50213 srv50213   94 Aug 21 09:26 test 
-rw-r-----  1 srv50213 srv50213   75 Aug  4 21:05 yiic 
-rw-r-----  1 srv50213 srv50213  395 Aug  4 21:05 yiic.bat
-rw-r-----  1 srv50213 srv50213  178 Aug  4 21:05 yiic.php
[srv50213@cl10-m protected]$ test
[srv50213@cl10-m protected]$ test
[srv50213@cl10-m protected]$ yiic
-bash: yiic: command not found
[srv50213@cl10-m protected]$ yiic.php
-bash: yiic.php: command not found
[srv50213@cl10-m protected]$ 

コンテンツyiic:

#!/usr/bin/env php
<?php

require_once(dirname(__FILE__).'/yiic.php');

コンテンツyiic.php:

defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));

defined('YII_DEBUG') or define('YII_DEBUG',true);

require_once(dirname(__FILE__).'/yii.php');

if(isset($config))
{
  $app=Yii::createConsoleApplication($config);
  $app->commandRunner->addCommands(YII_PATH.'/cli/commands');
}
else
  $app=Yii::createConsoleApplication(array('basePath'=>dirname(__FILE__).'/cli'));

$env=@getenv('YII_CONSOLE_COMMANDS');
if(!empty($env))
  $app->commandRunner->addCommands($env);

$app->run();

修正する

提案どおりに権限を変更しましたが、実行すると ./yiic結果は次のようになります。:対応するファイルやディレクトリはありません。 これで./testうまく機能します。

-rwxr-----  1 srv50213 srv50213   94 Aug 21 11:33 test 
-rwxr-xr-x  1 srv50213 srv50213   75 Aug  4 21:05 yiic 
-rw-r-----  1 srv50213 srv50213  178 Aug  4 21:05 yiic.php
[srv50213@cl10-m protected]$ test
[srv50213@cl10-m protected]$ ./test
test OK
[srv50213@cl10-m protected]$ ./yiic
: No such file or directory
[srv50213@cl10-m protected]$ echo $PATH  
  /usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/web/users/srv50213/bin
[srv50213@cl10-m protected]$ 

何が問題なの?

アップデート2

実際、yiic.phpには次のものが含まれています:

<?php

// change the following paths if necessary
$yiic=dirname(__FILE__).'/../../framework/yiic.php'; 
$config=dirname(__FILE__).'/config/main.php';

require_once($yiic); 

/../../framework/yiic.php質問の主要部分に公開されているフレームワークyiic.phpファイルのパスはどこにありますか? Frameworkフォルダにはyii.phpファイルもあります。

[srv50213@cl10-m protected]$ cd ..
[srv50213@cl10-m doc]$ cd .. 
[srv50213@cl10-m htdocs]$ cd framework
[srv50213@cl10-m framework]$ ls -l
total 432
drwxr-s---  2 srv50213 srv50213   4096 Jul 16 23:37 base
drwxr-s---  3 srv50213 srv50213   4096 Jul 16 23:37 caching
drwxr-s---  5 srv50213 srv50213   4096 Jul 16 23:37 cli
drwxr-s---  2 srv50213 srv50213   4096 Jul 16 23:37 collections
drwxr-s---  2 srv50213 srv50213   4096 Jul 16 23:37 console
drwxr-s---  4 srv50213 srv50213   4096 Jul 16 23:38 db
drwxr-s---  9 srv50213 srv50213   4096 Jul 16 23:38 gii
drwxr-s---  4 srv50213 srv50213   4096 Jul 16 23:41 i18n
drwxr-s---  2 srv50213 srv50213   4096 Jul 16 23:41 logging

drwxr-s--- 11 srv50213 srv50213   4096 Jul 16 23:45 web
-rw-r-----  1 srv50213 srv50213  37100 Jul 16 23:37 YiiBase.php
-rw-r-----  1 srv50213 srv50213    358 Jul 16 23:37 yiic
-rw-r-----  1 srv50213 srv50213    577 Jul 16 23:37 yiic.bat
-rw-r-----  1 srv50213 srv50213    834 Aug 21 13:05 yiic.php
-rw-r-----  1 srv50213 srv50213 304900 Jul 16 23:37 yiilite.php
-rw-r-----  1 srv50213 srv50213    638 Jul 16 23:37 yii.php
-rw-r-----  1 srv50213 srv50213    175 Jul 16 23:37 yii-powered.png
-rw-r-----  1 srv50213 srv50213    694 Jul 16 23:37 yiit.php
drwxr-s---  4 srv50213 srv50213   4096 Jul 16 23:45 zii
[srv50213@cl10-m framework]$ 

フレームワークフォルダにあるyii.phpとyiic.phpのモード(chmode)も変更する必要がありますか?

アップデート3

[srv50213@cl10-m protected]$ php yiic.php提案されているようにPHPデバッグ情報を実行してエクスポートします。

    exception 'CException' with message 'Property "CConsoleApplication.defaultController" is not defined.' in /home/srv50213/htdocs/framework/base/CComponent.php:173
    Stack trace:
    #0 /home/srv50213/htdocs/framework/base/CModule.php(515): CComponent->__set('defaultControll...', 'site')
    #1 /home/srv50213/htdocs/framework/base/CApplication.php(161): CModule->configure(Array)
    #2 /home/srv50213/htdocs/framework/YiiBase.php(125): CApplication->__construct('/home/srv50213/...')
    #3 /home/srv50213/htdocs/framework/YiiBase.php(113): YiiBase::createApplication('CConsoleApplica...', '/home/srv50213/...')
    #4 /home/srv50213/htdocs/framework/yiic.php(23): YiiBase::createConsoleApplication('/home/srv50213/...')
    #5 /home/srv50213/htdocs/doc/protected/yiic.php(7): require_once('/home/srv50213/...')

完璧

みんなありがとうございます。問題の1つは(デバッグ情報で述べたように) /home/srv50213/htdocs/framework/yiic.php(23)- です。だから$ config varを変更しました。$config$app=Yii::createConsoleApplication($config);/home/srv50213/htdocs/doc/protected/yiic.php(5)以来$config=dirname(__FILE__).'/config/main.php';効果 $config=dirname(__FILE__).'/config/console.php';がありました!

cronコマンドで実行するphp yiic.phpのではなく実行する必要がありますか?./yiic

ベストアンサー1

2つの質問があります。

まず、実行権限がないことです。

次の権限を追加してください。

$ chmod u+x yiic

uユーザー(あなた)にx実行権限を与えます。


2番目の別の質問は、プログラムを呼び出す方法とプログラムを見つける方法についてです。
今実行権限がありますが、

$ yiic

それでもエラーが発生する可能性がありますcommand not found

これは、実行するコマンドが変数としてリストされたディレクトリから検索されるためです。このディレクトリには$PATH通常、現在のディレクトリは含まれておらず、セキュリティ上の理由から含めてはいけません。

ただし、コマンドファイルを含むディレクトリへのパスとして実行するコマンドのファイル名を指定できます。最も単純な変形は、現在のディレクトリを使用することです。

$ ./yiic

いよいよ動作します!

上記の内容がなくても機能している場合は、./現在のディレクトリが表示されます。見てください。.$PATH

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


(ああ、そしてtest何かをテストするためにファイル名を使用することには有名な問題があります...これは本当に悪い落とし穴です。

おすすめ記事