2015-11-05 130 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' |"); 
...