重複の可能性:
セーフ モードでの PHP バックグラウンド プロセス
私のプロジェクトは共有ホストで実行されているため、セーフ モードが有効になっています。exec()関数を使いたかったのですが、できません。この場合どうすればいいですか?
セーフモードで動作する同じ機能または解決策はありますか?
重複の可能性:
セーフ モードでの PHP バックグラウンド プロセス
私のプロジェクトは共有ホストで実行されているため、セーフ モードが有効になっています。exec()関数を使いたかったのですが、できません。この場合どうすればいいですか?
セーフモードで動作する同じ機能または解決策はありますか?
この関数は、私が認識しているすべての可能性を兼ね備えています。それを試してみてください。うまくいけば、それは役に立ちます。
<?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>";
?>