2011-12-09 52 views
35

Làm cách nào để máy chủ của tôi chạy tập lệnh php bằng cách kích hoạt bằng tay php? Về cơ bản tôi có một tập tin cronjob khá lớn được chạy mỗi 2 giờ, nhưng tôi muốn có thể kích hoạt các tập tin bằng tay bản thân mình mà không cần phải chờ đợi cho nó để tải (tôi muốn nó được thực hiện ở phía máy chủ).Thực hiện một tập lệnh PHP từ một tập lệnh PHP khác

EDIT: Tôi muốn thực thi tệp từ tệp php ... Không phải dòng lệnh.

+2

Chỉ cần chạy lệnh tương tự cron là? Hoặc chỉ cần 'php file.php'? –

+1

Tại sao bạn không chỉ cần sao chép lệnh từ crontab và dán nó vào dòng lệnh? –

+0

@Rocket Tôi muốn làm điều đó từ một tập tin php – domino

Trả lời

82

Bạn có thể gọi một kịch bản PHP bằng tay từ dòng lệnh

hello.php 
<?php 
echo 'hello world!'; 
?> 

Command line: 
php hello.php 

Output: 
hello world! 

Xem tài liệu: http://php.net/manual/en/features.commandline.php


EDIT OP edited các câu hỏi để thêm một chi tiết quan trọng: tập lệnh sẽ được thực thi bởi một tập lệnh khác.

Có một vài cách tiếp cận. Đầu tiên và dễ nhất, bạn có thể chỉ cần bao gồm các tập tin. Khi bạn bao gồm một tệp, mã bên trong được "thực hiện" (thực sự, được diễn giải). Bất kỳ mã nào không nằm trong một hàm hoặc lớp cơ thể sẽ được xử lý ngay lập tức. Hãy xem tài liệu cho include (docs) và/hoặc require (docs) (lưu ý: include_oncerequire_once có liên quan, nhưng khác nhau theo cách quan trọng. Hãy xem tài liệu để hiểu sự khác biệt) Mã của bạn sẽ trông như sau:

include('hello.php'); 
/* output 
hello world! 
*/ 

Thứ hai và hơi phức tạp hơn là sử dụng shell_exec (docs). Với shell_exec, bạn sẽ gọi tệp nhị phân php và chuyển đoạn mã mong muốn làm đối số. Mã của bạn sẽ trông giống như sau:

$output = shell_exec('php hello.php'); 
echo "<pre>$output</pre>"; 
/* output 
hello world! 
*/ 

Cuối cùng và phức tạp nhất, bạn có thể sử dụng thư viện CURL để gọi tệp như thể được yêu cầu qua trình duyệt.Kiểm tra các tài liệu thư viện CURL đây: http://us2.php.net/manual/en/ref.curl.php

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, "http://www.myDomain.com/hello.php"); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) 

$output = curl_exec($ch); 
curl_close($ch); 
echo "<pre>$output</pre>"; 
/* output 
hello world! 
*/ 

Tài liệu cho các chức năng sử dụng

+1

Tôi muốn làm điều đó từ một tập tin php không phải dòng lệnh. – domino

+1

Đó sẽ là thông tin rất hữu ích để đưa vào câu hỏi của bạn! : P Xem chỉnh sửa, tôi thảo luận về rất nhiều cách để gọi một kịch bản PHP từ một kịch bản khác. –

+0

Cảm ơn rất nhiều vì đã trả lời dài! – domino

0

Nếu nó là một hộp linux bạn sẽ chạy một cái gì đó như:

php /folder/script.php 

Trên Windows, bạn sẽ cần phải chắc chắn rằng tập tin php.exe của bạn là một phần của PATH của bạn, và làm một cách tiếp cận tương tự như file bạn muốn chạy:

php C:\folder\script.php 
0

Trên dòng lệnh:

> php yourfile.php 
0

mở ssh và thực hiện comman d bằng tay?

php /path/to/your/file.php 
2

bạn có thể sử dụng các ký hiệu backtick:

`php file.php`; 

Bạn cũng có thể đặt này ở phía trên cùng của file php để chỉ người phiên dịch:

#!/usr/bin/php 

Thay đổi nó đến nơi mà bạn đặt php. Sau đó cung cấp cho thực thi điều khoản trên các tập tin và bạn có thể gọi các tập tin mà không chỉ định php:

`./file.php` 

Nếu bạn muốn bắt đầu ra của kịch bản:

$output = `./file.php`; 
echo $output; 
+0

câu trả lời này không liên quan nhưng nó là tốt để biết. –

-4

Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm

<?php include ('Scripts/Php/connection.php'); 
//The connection.php script is executed inside the current file ?> 

Các tập tin kịch bản cũng có thể là trong một định dạng .txt, nó vẫn phải làm việc, nó làm cho tôi

ví dụ:

<?php include ('Scripts/Php/connection.txt'); 
//The connection.txt script is executed inside the current file ?> 
5

OP tinh chỉnh câu hỏi của mình về cách tập lệnh php được gọi từ tập lệnh. Câu lệnh php 'require' là tốt cho dependancy vì script sẽ dừng lại nếu không tìm thấy script.

#!/usr/bin/php 
<? 
require '/relative/path/to/someotherscript.php'; 

/* The above script runs as though executed from within this one. */ 

printf ("Hello world!\n"); 

?> 
0

để "chuỗi" một chương trình php từ bên trong mã của bạn, sử dụng "tiêu đề"

header("Location:index.php?page=menus");

+0

Nếu tập lệnh ban đầu được chạy từ CRON, nó sẽ không chạy tiêu đề như tôi vừa phát hiện - trong trường hợp có người khác gặp vấn đề tương tự. – BeNice

2

Tôi thích sử dụng

require_once('phpfile.php'); 

nhiều lựa chọn ra ở đó đợi em . và một cách tốt để giữ mọi thứ sạch sẽ.

0
<?php 
$output = file_get_contents('http://host/path/another.php?param=value '); 
echo $output; 
?> 
+1

cung cấp một số ngữ cảnh và giải thích mã của bạn. –

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