CLI cron üzerinden zend çerçeve çalıştırmak yolları dahil

2 Cevap php

Bazı gece raporlama yapmak için Zend Framework kullanarak bir komut satırı yardımcı programı yazdı. Bu aynı işlevselliği eşlik sitesi bir ton kullanır. Ben elle çalıştırmak zaman harika çalışıyor, ama ben cron üzerinde çalıştırdığınızda yolu konuları içerir var. Bunun gibi görünüyor kolayca set_include_path ile sabit olmalı, ama belki ben bir şey eksik?

Benim dizin yapısı bu gibi görünüyor:

/var/www/clientname/
    application
        Globals.php
    commandline
        commandline_bootstrap.php       
    public_html
        public_bootstrap.php        
    library
        Zend

Public_bootstrap.php ben geçerli dizine göre, bir sorun olmadan set_include_path kullanın:

set_include_path('../library' . PATH_SEPARATOR . get_include_path());  

Eğer doğru anlamak, commandline_bootstrap.php ben mutlak yoluna koymak gerekir, bu yüzden her şeyi nerede cron bilir. Dosyam böyle başlar:

error_reporting(E_ALL);
set_include_path('/var/www/clientname/library' . PATH_SEPARATOR . get_include_path());  
require_once "../application/Globals.php";

Ben cron üzerinden çalıştırdığınızda, ama ben aşağıdaki hatayı alıyorum:

PHP Fatal error: require_once(): Failed opening required '../application/Globals.php' (include_path='/var/www/clientname/library/') in /var/www/clientname/commandline/zfcli.php on line 11

Ben bunu komut satırını çalıştırın ve phpinfo dökümü zaman görüyorum, çünkü ben, PHP yeni bir yol kabul olduğunu düşünüyorum:

include_path => /var/www/clientname/library/:.:/usr/share/pear:/usr/share/php => .:/usr/share/pear:/usr/share/php

Ben burada sözdizimi biraz garip görünüyor kabul ediyorum, ama bunu düzeltmek için nasıl anlamaya olamaz. Herhangi bir öneri büyük takdir.

Thanks summer

2 Cevap

zf-cli ZFPlanet at Pádraic yaklaşımına bir göz atın.

İşte kabuğundan php dosyasını çalıştırmak için kullanmak, bu yüzden cwd ne eminim biraz kabuk yazısıdır:

#!/usr/bin/env php
<?php
chdir(dirname(__FILE__));
include('doctrine-cli.php');

a bug in the autoloader's isReadable() önce 1.10.4 için, yükseltme çalıştığınızda da vardı.

Büyük olasılıkla CRON işin geçerli dizini commandline dizin değil. getcwd() geçerli dizini kontrol etmek için kullanın.

[Edit:]

Ayrıca bu beklenmedik davranışa neden olabilir set_include_path göreceli yolları kullanmayın - Geçerli dizin hariç tabii .. Eğer include_path eklemek önce, realpath() mutlak yolunu almak için kullanabilirsiniz.