2012-09-20 3 views
0

가능한 중복 :
PHP background process in safe modePHP는 간부() 또는 동일한 기능

내 프로젝트가 공유 호스트 등 안전 모드에서 실행이 활성화됩니다. exec() 기능을 사용하고 싶었지만 불가능했습니다. 이 경우 어떻게해야합니까?
안전 모드에서 작동하는 동일한 기능 또는 솔루션이 있습니까?

+0

호스트를 이동하십시오. 정말 최고의 옵션입니다. 많은 공유 호스트가 exec()를 허용하고 결코 안전 모드가 –

+0

이었습니다. 해결책이 아니라 문제가 바뀌고 있습니다. – Aliweb

+2

대부분의 좋은 호스트에는 이러한 제한이 없습니다. 물론 솔루션 일 것입니다. 수백만의 호스트가 있으며 모든 프로젝트가 특정 프로젝트에 적합하지는 않습니다. 그들이이 한계를 '코드'를 통해 주위에 어떤 식 으로든 부과한다면 어쩌면 강력한 해결책이 아니기 때문에 조건 위반 일 수 있습니다. –

답변

0

이 함수는 내가 알고있는 모든 가능성을 결합합니다. 시도 해봐. 나는 그것이 도움이되기를 바랍니다.

<?php 
function _exec($cmd) { 
    $disablefunc = array(); 
    $disablefunc = explode(",", str_replace(" ", "", @ini_get("disable_functions"))); 
    if(is_callable("exec") && !in_array("exec", $disablefunc)) { 
     exec($cmd, $result); 
     $result = join("\n", $result)."\n"; 
    } elseif(is_callable("system") && !in_array("system", $disablefunc)) { 
     $src = @ob_get_contents(); 
     @ob_clean(); 
     system($cmd); 
     $result = @ob_get_contents(); 
     @ob_clean(); 
     echo $src; 
    } elseif(is_callable("passthru") && !in_array("passthru", $disablefunc)) { 
     $src = @ob_get_contents(); 
     @ob_clean(); 
     passthru($cmd); 
     $result = @ob_get_contents(); 
     @ob_clean(); 
     echo $src; 
    } elseif(is_callable("popen") && !in_array("popen", $disablefunc) && is_resource($h = popen($cmd, "r"))) { 
     $result = ""; 
     if(is_callable("fread") && !in_array("fread", $disablefunc)) { 
      while(!feof($h)) { 
       $result .= fread($h, 1024); 
      } 
     } else { 
      while(!feof($h)) { 
       $result .= fgets($h, 1024); 
      } 
     } 
     pclose($h); 
    } else { 
     trigger_error("Cannot execute the command due to server restrictions.", E_USER_WARNING); 
     return false; 
    } 
    return $result; 
} 

echo "<pre>"._exec("ls")."</pre>"; 
?>