2015-11-05 138 views
1

我的perl文件和php文件位於同一個文件夾中。我在Perl調用PHP腳本在cmd中從perl程序運行php腳本

我database.pl腳本

#!/usr/bin/perl 
while (2) 
{ 
    my $php = `sample.php`; 
    sleep (10); 

} 

我sample.php文件

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = ""; 
$dbname = "mydb"; 
$conn = new mysqli($servername, $username, $password, $dbname); 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 
$sql = "UPDATE users SET name1='Doe' WHERE id=1"; 
if ($conn->query($sql) === TRUE) { 
    echo "Record updated successfully"; 
} else { 
    echo "Error updating record: " . $conn->error; 
} 
$conn->close(); 
?> 

現在,當我運行database.pl文件,我sample.php文件是打開在編輯器中每10秒..現在我應該如何讓我的PHP文件運行,以便它應該運行UPDATE查詢。

回答

0

根據您使用的操作系統,有不同的方法。看起來好像你在Windows雖然。

可能您對.php擴展名的默認操作是在編輯器中打開它。將反引號行更改爲使用PHP解釋器顯式運行腳本。

my $php = `php sample.php`; 

這當然需要Windows知道php是哪裏。它應該在你的PATH變量中。

如果你是的Linux,可以使PHP腳本執行...

$ chmod u+x sample.php 

...,並從當前directoy調用它。

my $php = `./sample.php`; 

注意,你可以只使用DBI從Perl的做你的SQL查詢,或在PHP中實現該循環和再利用你的數據庫連接存在。

0

或者說,是(種)攜帶方便,使用Perl open

open(my $proc, 'php sample.php |'); 
my $php = join('', <$proc>) 

和,可以肯定,你是在同一個目錄中執行腳本,使用FindBin模塊:

use FindBin qw($RealBin); 
open(my $proc, "php '$RealBin/sample.php' |"); 
...