在php中后台运行url


Run url in background in php

在我的应用程序中,我必须在注册时向用户发送短信。但当在数据库中插入记录时,我想在浏览器中点击这个url。

有人能建议如何在后台运行这个url吗

http://www.myurl.com/smpp/sendsms?username=XX&password=XX&to=XX&from=XX&text=Test

这取决于你对background的意思,但我认为你的意思是用户不会被重定向到该页面。

如果我是你,如果你安装了cURL,我会选择它,因为你似乎唯一想做的就是发出一个普通的请求,也许,阅读响应。下面的代码未经测试,但应该会给您一个提示。

$req = curl_init();
curl_setopt($req, CURLOPT_URL,"theaddress_and_params");
curl_exec($req);
public function get_url($url)
{
    $cmd  = "curl --max-time 60 ";
    $cmd .= "'" . $url . "'";
    $cmd .= " > /dev/null 2>&1 &";
    exec($cmd, $output, $exit);
    return $exit == 0;
}

它将通过cli调用curl。它将在后台运行。

如果这样做,您将在URL(或标头)中公开用户名和密码。让用户提前登录并使用会话变量。

不要从客户端发送,因为每个用户都可以通过加载带有一些(潜在恶意)参数的URL来"伪造"数据。"用户名"answers"密码"根本不受保护,我相信你的服务很快就会瘫痪。

相反,您可以使用PHPs curl函数在后台(服务器端)轻松地做到这一点:

http://www.php.net/manual/en/curl.examples-basic.php

$url = 'http://yoursmsgateway.com/WebSMS/SMSAPI.jsp?username='.$smsuser.'&password='.$smspwd.'&sendername='.$smssender.'&mobileno='.$number.'&message='.urlencode($message);
echo $url;
   $mystring = get_data($url);
//echo "hi!";
echo $mystring;
function get_data($url) {
    $ch = curl_init();
    $timeout = 5;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

您可以尝试此代码,但必须安装cUrl DLL文件。安装CURL的过程如下:--

1.)打开php.ini文件

2.)找到这个dll文件--->;extension=php_curl.dll

3.)拆除;(分号)

4.),如--->extension=php_curl.dll

5.)保存(Ctrl+s)

您可以用pcntl-php扩展派生一个子进程。

(实现此功能的库:https://github.com/kriswallsmith/spork)

当用户点击提交按钮时进行AJAX调用。这将导致该URL处的脚本在后台运行,而当前的PHP将记录插入数据库中。

Ajax?使用ajax在div中加载该url,同时使用ajax保存调用另一个php文件的记录。

我认为没有多线程这样的概念(这本质上是你所要求的),因为PHP代码中的一切都是递增运行的,但你可以找到一个解决方案。看看这些问题和答案。

PHP中没有多线程的原因是,所有的东西都是在服务器中处理的,并且作为客户端,您已经收到了完成的响应,因此PHP中的"后台运行"与"顺序运行"相同。