2014-12-17 12 views
10

Başka bir PHP betiğinde exec() işlevini çağıran bir PHP betiğim var. Bu mükemmel çalışır, ancak NetBeans'de XDebug hata ayıklayıcısını kullanırken askıda kalıyor. Bu, uygulamanın tamamını ayıklayamadığım için her türlü soruna neden oluyor. İşte PHP Hata ayıklayıcı exec çağrılırken askıda kalıyor ('php ...')

önemsiz bir örnektir:

test1.php

<?php 

$output = array(); 
$status = 0; 
exec('echo "Running inside test 1"', $output, $status); 
exec('php ' . __DIR__ . '/test2.php', $output, $status); // Debugger hangs here 

var_dump($output); 
var_dump($status); 
?> 

test2.php

<?php 
echo "Running inside test 2" . PHP_EOL; 
?> 

Ben koşmak test1.php, tamamlanıncaya kadar devam eder ve üretirse beklenen çıktı.

I hata ayıklaması test1.php, exec ('php ...') satırında kalıyor.

Bunu shell_exec ile denedim ve aynı sorunu yaşıyorum. Ayrıca, bir sorunla birlikte .sh dosyası veya başka bir yürütülebilir dosya üzerinde çalıştırmayı denedim.

İlk başta xdebug nasılsa çalıştırma sırasında ve bunu kilitleyerek başlatılan yeni PHP sürecine takılarak düşünüyordu, ama benim php.ini kontrol edilip xdebug.remote_autostart=off var ettik.

Bir PHP betiğini exec() ile çağırmanın garip bir şey yapmanın bir yolu olduğunu biliyorum; Aslında gerçek kod tabanında çalıştırdığımız harici olarak sağlanan bir PHAR dosyasıdır, ancak yukarıdaki önemsiz örnek aynı belirtiye sahiptir, bu yüzden aynı sorun olduğunu varsayalım.

İlgili olması durumunda, PHP 5.5.13, Xdebug 2.2.3, Netbeans 7.3.1, Ubuntu 12.0.4 kullanıyorum.

cevap

2

Bunun nedeni, ikinci komut dosyasını çalıştırdığınızda xdebug'un zaten meşgul olması, böylece innder komut dosyalarının durması ve dış komut dosyasının yürütülmesine devam edilememesidir.

bu sorunla başa çıkmak için: php ini de

  1. comment Xdebug kapalı ayarları ve içerdiği değil ortam değişkeni XDEBUG_CONFIG kontrol herhangi
  2. xdebug parametreleri ile ana senaryoyu (başlangıç ​​
  3. php -dxdebug.remote_enable = 1 -dxdebug.remote_mode = Tlp -dxdebug.remote_port = 9000 -dxdebug.remote_host = 127.0.0.1) xdebug parametreleri olmadan
  4. exec ikinci komut dosyası: exec ('php script.php')

İç komut dosyasını hata ayıklamak için, xdebug olmadan ilk komut dosyasını başlatın ve xdebug ile çalıştır, tersi.