2017-04-26 28 views
17

Tôi đang cố tạo Android apk tệp từ tập lệnh shell, tôi muốn thực thi tệp tập lệnh shell từ PHP. Khi tôi chạy kịch bản lệnh shell trong terminal, nó hoạt động hoàn hảo. Nếu tôi cố gắng chạy kịch bản bằng cách sử dụng PHP, kịch bản lệnh shell sẽ không thực hiện tất cả các lệnh. Lệnh ls trong shell script hoạt động hoàn hảo, nhưng khi thực thi bằng PHP, các lệnh khác không hoạt động. Tôi đang sử dụng máy chủ xampp trong môi trường Linux.Tạo apk android bằng cách sử dụng tập lệnh shell từ php?

shell script My

cd /home/user/AndroidStudioProjects/msvep4247-inghamautogroup-pulse-and/ 
./gradlew assembleDebug 
cp -fr app/build/outputs/apk/app-debug.apk /opt/lampp/htdocs/sample/apk 
ls 

Shell script ls đầu ra

ứng dụng autolead_data_format.pdf build build.gradle má gradle gradle.properties gradlew local.properties lib gradlew.bat msvep4247-inghamautogroup cài đặt -pulse-and.iml.gif

My PHP script

<?php 
     echo shell_exec('ls'); 
     echo shell_exec('./generateApk.sh'); 
    ?> 

PHP script ls đầu ra

generateApk.sh generate.php apk

Lưu ý: ls đầu ra tên tập tin trong thư mục

tôi đặt tất cả các tập tin quyền cho kịch bản lệnh shell trong máy chủ xampp. Bất cứ ai có thể mô tả nơi tôi bị nhầm lẫn? Đang chờ phản hồi ...

+1

'Không thực thi' ... Bất kỳ lỗi nào? – modsfabio

+0

Bạn có thể kiểm tra xem công trình này có hoạt động không? '$ output = shell_exec ('./ generateApk.sh');' 'echo $ output"; ' –

+0

@ZumodeVidrio đã được kiểm tra, nhưng không hoạt động – Keerthivasan

Trả lời

11

Chỉ cần sử dụng đường dẫn đầy đủ đến tập lệnh/thực thi, vì môi trường khác khi chạy từ php.

+0

đường dẫn đầy đủ - shell_exec ('/ opt/lampp/htdocs/sample/generateApk.sh'); – Keerthivasan

+3

Nếu bạn không muốn mã hóa đường dẫn, bạn có thể sử dụng [dirname] (http://php.net/manual/en/function.dirname.php) - 'dirname (__ FILE __)' – DeeBee

3

Có vẻ như biến số môi trường trong mã PHP được thực hiện trong máy chủ web bị hạn chế hơn so với mã trong trình bao mà bạn đang làm việc. Nhưng bạn có thể thay đổi biến môi trường trong PHP và các lệnh bạn bắt đầu từ nó sẽ thấy những thay đổi đó.

<?php 
// set content type so the output is more readable in the browser 
header('Content-Type: text/plain'); 
// set $PATH to some limited value 
putenv('PATH=/bin:/sbin'); 
// verify, note that we have to use full path to 'env' 
print(shell_exec("/usr/bin/env|grep '^PATH='")); 
// this command won't run (assuming its full path is /usr/bin/id) 
print(shell_exec("id")); 
// add more directories to $PATH 
putenv('PATH=/bin:/sbin:/usr/bin:/usr/sbin'); 
// verify again, we can use env without specifying the path this time 
print(shell_exec("env|grep '^PATH='")); 
// this command will 
print(shell_exec("id")); 

Vì vậy, bạn phải viết putenv('PATH=<your_shell_PATH_contents>'); ở đầu tập lệnh PHP. Việc sử dụng đường dẫn đầy đủ đến tập lệnh shell sẽ không giúp ích nếu chính kịch bản sử dụng các đường dẫn tương đối đến các tệp nhị phân mà nó bắt đầu.

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