Php içinde bir sanal alana php kodu çalıştırmak için bir yolu var mı

6 Cevap php

Ben farklı sabitler ve önceden tanımlanmış sınıfların farklı sürümlerini kullanan php bir php-script çalıştırmak istiyorum.

Ben sadece olabilir sandbox php_module var mı:

sandbox('script.php'); // run in a new php environment

yerine

include('script.php'); // run in the same environment

Veya proc_open() tek seçenek nedir?

PS: komut web üzerinden erişilebilir değil, ('http://host/script.php') yani fopen bir seçenek değildir.

6 Cevap

Orada runkit, ama sen ana ve çocuk süreçler arasında herhangi bir etkileşim ihtiyacı yoksa daha basit, sadece, komut satırında (Kullanım shell_exec) üzerinden komut aramak bulabilirsiniz .

Ayrıca, backtick operator bakmak gerekir:

$sOutput = `php script_to_run.php`;

Bu size çalıştırdığınız komut çıkışını incelemek için izin verir. Ancak, script sahip ayrıcalıkları ile çalıştırmak olacaktır unutmayın, ancak Linux üzerinde sudo kullanarak bu engelleyecek olabilir.

Bu yaklaşım aynı zamanda size her zaman böyle değildir yüklü PHP CLI, sahip olduğunu varsayar.

Yardımcı olabilir GitHub bir sınıf, erken aşamalarında ama umut verici görünüyor.

https://github.com/fregster/PHPSandbox

Ben bu çok amaç için bir BSD lisanslı sanal sınıf geliştirdik. Bu kullanıcı yapılandırılabilir aklistelerden ve kara karşı kontrol, korumalı alan kodunu analiz PHPParser kütüphane kullanır, ve aklı başında varsayılan ayarlarla birlikte yapılandırma seçenekleri geniş bir yelpazeye sahiptir. Ihtiyaçlarınız için kolayca sandbox kodu olarak adlandırılan sınıflar ve farklı olanları ulaşım onları yeniden tanımlayabilirsiniz.

Proje aynı zamanda sandbox ayarlarını denemek için kullanılan bir sanal araç seti (yerel makinede sadece kullanın!), Ve tam manuel ve API belgeleri bulunur.

https://github.com/fieryprophet/php-sandbox

i ile ilgili olarak% 100 değil konuyu biliyorum, ama biri n__n için belki yararlı

function require_sandbox($__file,$__params=null,$__output=true) {

    /* original from http://stackoverflow.com/a/3850454/209797 */

    if($__params and is_array($__params))
     extract($__params);

    ob_start();
    $__returned=require $__file;
    $__contents=ob_get_contents();
    ob_end_clean();

    if($__output)
     echo $__contents;
    else
     return $__returned;

};