【问题标题】:CronJob Friendly PHP redirectCronJob 友好的 PHP 重定向
【发布时间】:2015-08-18 11:35:03
【问题描述】:

我正在努力使用由 Cronjob 激活并包含重定向的 PHP 脚本。

脚本在我的数据库中查找记录,发送适当的电子邮件,然后重定向到已编译的 URL,以便将记录的详细信息导入外部系统。

电子邮件部分通过 Cronjob 可以正常工作,但重定向不能,我知道这是因为 Cronjobs 不在浏览器中运行,但我不确定重定向到 URL 的最佳替代方法是什么。

下面的简化代码:

<?php 

// Connect to DB
require_once($_SERVER['DOCUMENT_ROOT']."/admin/inc/dbconnect.php");

// Check DB for quotes that have not been sent to this client
$query_quotes = "SELECT * FROM quotes WHERE sent_client = 0 LIMIT 1";
$view_request = mysqli_query($GLOBALS['db_connect'], $query_quotes);

// Send to external system and email customer with quote
while ($quotes = mysqli_fetch_array($view_request)){

    $Body = "Email Content";

    // Send email via Swift Mailer

    // Send quote information to third party system via URL redirect
    header('Location: http://exampleurl/?FirstName='.rawurlencode($quotes['name']).'&businessName='.rawurlencode($quotes['company_name']).'.');

}

?>

【问题讨论】:

  • 使用 cURL php.net/manual/en/book.curl.php 可能会有更好的运气。
  • 谁能帮我解决在这种情况下如何使用 cURL 的问题?我可以在服务器上制作一个简单的 cURL 脚本,但尝试复制重定向似乎会导致超时错误,我想是因为它期待的响应不会出现?
  • 我不太明白你所说的重定向是什么意思?从您的示例来看,一个简单的 HTTP 请求就足够了。

标签: php redirect cron


【解决方案1】:

正如您所说,您不在网络环境中,因此没有浏览器可以对Location: 重定向进行操作。这并不意味着你不能将信息传递到网页——你只是不能重定向到它——你调用它,然后取回信息——你取回的信息可能不多——只是'好的,我知道了这可能绰绰有余。它可能像

一样简单
$url = "http://exampleurl/?FirstName=" . 
    rawurlencode($quotes['name']) . '&businessName=' .
    rawurlencode($quotes['company_name'])
$response = file_get_contents($url);

并且响应可能像200 OK 一样简单(尽管如果除了'OK' 之外没有响应,根据HTTP 规范,你会返回204 No Content,但这是一件非常小的事情)。

最好还是使用适当的 HTTP 调用函数,该函数可以处理重定向等潜在问题并让生活变得更轻松——例如 Guzzle 库,但同样,如果 file_get_contents 对你的 URL 有效,那至少在您测试基础知识时可能就足够了。

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 2012-02-24
    • 2012-12-07
    • 2021-09-15
    • 1970-01-01
    • 2019-08-01
    • 2018-04-28
    • 2012-05-22
    • 1970-01-01
    相关资源
    最近更新 更多