轉自 http://phpff.com/938.htmlphp
Xhprof在windows下點擊[View Full Callgraph]調用graphviz軟件時。
警告Warning: proc_open() [function.proc-open]: CreateProcess failed, error code – 0 in
並提示
failed to execute cmd " D:/graphviz-2.38/release/bin/dot -Tpng"html
位置是xhprof_lib/utils/callgraph_utils.php文件下xhprof_generate_image_by_dot函數
windows下
$cmd = " dot -T".$type;
須要替換成
$cmd = " D:/graphviz-2.38/release/bin/dot -T".$type;linux
問題就出如今這行代碼
$process = proc_open($cmd, $descriptorspec, $pipes, "/tmp", array());
須要改爲
$process = proc_open($cmd, $descriptorspec, $pipes);windows
或者是創建相應的tmp文件夾,由於默認是不存在tmp文件夾的。嘗試在網站根目錄創建tmp文件夾可是仍是保存,因而改爲了在當前目錄。
$process = proc_open($cmd, $descriptorspec, $pipes, "tmp", array());函數
//修改後的正確代碼
function xhprof_generate_image_by_dot($dot_script, $type) {
//echo($dot_script);
$descriptorspec = array(
// stdin is a pipe that the child will read from
0 => array("pipe", "r"),
// stdout is a pipe that the child will write to
1 => array("pipe", "w"),
// stderr is a pipe that the child will write to
2 => array("pipe", "w")
);網站
//$cmd = " dot -T".$type; //linux下
//1.修改graphviz目錄
$cmd = " D:/graphviz-2.38/release/bin/dot -T".$type;//windows下
//2.tmp文件夾處理
$process = proc_open($cmd, $descriptorspec, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], $dot_script);
fclose($pipes[0]);code
$output = stream_get_contents($pipes[1]);htm
$err = stream_get_contents($pipes[2]);
if (!empty($err)) {
print "failed to execute cmd: \"$cmd\". stderr: `$err'\n";
exit;
}ip
fclose($pipes[2]);
fclose($pipes[1]);
proc_close($process);
return $output;
}
print "failed to execute cmd \"$cmd\"";
exit();
}get