2013-07-17 30 views
10

Tôi đang cố gắng chạy lệnh shell text2wave trong PHP trên máy chủ nginx.Lễ hội Text2wave không hoạt động qua nginx php exec

Sự cố là lệnh chỉ thoát âm thầm mà không hoạt động như mong muốn. Nó cũng không hiển thị bất kỳ lỗi nào.

Dưới đây là các mã:

<?php 
$result = `/usr/bin/text2wave --help`; 
var_dump($result); 

Nếu tôi chạy kịch bản thông qua lệnh php trong vỏ (như một người dùng bình thường) nó hoạt động như mong đợi. Tuy nhiên, nếu tôi chạy nó thông qua một yêu cầu http qua nginx var_dump trả về NULL (cũng không có nhật ký trong tệp nhật ký lỗi)

Cảm ơn sự giúp đỡ của bạn!

+0

có thể vì phiên bản php không có quyền chạy lệnh, kiểm tra quyền và quyền sở hữu của tệp thực thi 'text2wave' –

+0

quyền là -rwxr-xr-x. Tương tự như lễ hội chương trình hoạt động hoàn hảo qua nginx php –

+0

cố gắng kích hoạt 'ini_set ('display_errors', 'on')' trong dòng đầu tiên và xem nó có hiển thị bất kỳ thứ gì không. –

Trả lời

0

Dự đoán của tôi là bạn đã tắt thực thi trình bao trong tệp cấu hình php.ini được máy chủ web của bạn sử dụng.

Hãy thử mở /etc/php5/fpm/php.ini tập tin, tìm kiếm các chỉ thị disable_functions, và đảm bảo rằng none của các chức năng sau có mặt trong giá trị của chỉ thị: shell_exec,exec,passthru,system

+0

Bạn có thể giải thích cách thực thi một cách kỳ diệu '' result = '/ usr/bin/text2wave của OP' - help '; '? Nhìn lại nó - đó là một phép gán biến (chuỗi), không phải là một hàm. OP không phải sửa bất kỳ cấu hình nào; thay vào đó, OP cần sửa mã PHP của mình. –

+0

@ e-sushi http://php.net/manual/en/language.operators.execution.php –

+0

Ồ, đó là * "backticks" *! Tôi nghĩ đó là những lỗi định dạng… (đánh đầu vào tường). bạn hoàn toàn chính xác. Cảm ơn cho những người đứng đầu lên. Tôi đã xóa câu trả lời không đúng của mình cho phù hợp. Theo quan điểm của tôi, bạn sẽ nhận được tiền thưởng đó xứng đáng! Mặt khác, nhìn vào thực tế là tôi đã không nhận thấy sự khác biệt giữa dấu ngoặc đơn và dấu gạch chéo ngược, * "chế độ xem" * của tôi có thể không phải là tốt nhất để dựa vào. ;) –

3

thử:

<?php 
function sys_cmd($cmd) 
{ 
    $hd = popen($cmd,"r") or die('function disabled'); 
    while (!feof($hd)) 
    { 
     $rs .= fread($hd,1024);  
    } 
    pclose($hd); 
    return $rs; 
} 
echo sys_cmd('ls -l'); 
?> 
+0

kịch bản hoạt động với 'ls -l', nhưng không phải với 'text2wave --help' (cũng không sử dụng bình thường của text2wave tất nhiên) –

0

Để ai haing cùng một vấn đề ... Tôi đã quản lý để tìm ra vấn đề là gì. Vâng .. loại.

Tôi đã chuyển sang apache và nó bắt đầu hoạt động ngay lập tức. Vì vậy, giải pháp không phải là để sử dụng nginx

Tôi đoán nó có cái gì để làm với cách nginx chạy php khi thực hiện lệnh exec ...

Mặc dù đó là một quyết định khó khăn, tôi thấy không có giải pháp nào khác ngoài việc thay đổi thành apache ... hoạt động tốt ngay bây giờ

Các vấn đề liên quan