从perl程序运行php脚本


Running php script from perl program

我的perl文件和php文件在同一个文件夹中。我正在cmd 中从perl调用php脚本

我的数据库.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查询。

根据您使用的操作系统,有不同的方法。不过,您似乎在Windows上。

.php扩展的默认操作可能是在编辑器中打开它。更改backticks行以使用PHP解释器显式运行脚本。

my $php = `php sample.php`;

这当然需要Windows知道php在哪里。它应该在PATH变量中。

如果您在Linux上,您可以使php脚本可执行。。。

$ chmod u+x sample.php

并从当前方向调用它。

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

请注意,您可以使用DBI从Perl执行SQL查询,或者在PHP中实现该循环并在那里重用您的DB连接。

或者,为了(有点)可移植,请使用perl-open:

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

并且,为了确保您在同一目录中执行脚本,请使用FindBin模块:

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