我有一个带有API的大型系统。在前端,JavaScript使用AJAX与API对话。
我有一个PHP文件,作为CRON作业每5分钟运行一次。我想让这个PHP代码与API交互。它需要提交的只是query-vars。返回的只是一个数字。
例如:https://examplesite.com/api/create?id=1&data=2这个函数用一个简单的数字作为响应,这个数字就是SQL的last-insert-id。
额外:API还需要两个Session变量(user-id和system-id)我想我可以在调用API之前启动session并设置它们吗?我需要由CRON系统运行的PHP脚本来与此API对话。
我试过使用cURL,但还没有运气:
//Need to add a user-id to session, does this work?
session_start();
$_SESSION['user-id'] = 1;
//HOW TO CALL API FROM CRON?
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch, CURLOPT_URL, 'https://example.com/api/create?id=1&gid=2');
//curl_setopt($ch, CURLOPT_URL, 'http://example.com/api/create?id=1&gid=2');
curl_setopt($ch, CURLOPT_URL, 'file://../framework/api/create.php?id=1&data=2');
$result = curl_exec($ch);
curl_close($ch);
$result = str_replace("\n", '', $result); // remove new lines
$result = str_replace("\r", '', $result); // remove carriage returns
//Expect Result to be a number only
file_put_contents("curl.log", "[".date('Y-m-d H:i:s')."] $result\n\n", FILE_APPEND);
文件方法似乎不起作用...可能是路径问题../http方法似乎不起作用...服务器回送问题?
任何关于如何最好地让我的PHP CRON机器人使用我的API的建议都将非常感谢。我只是简单地将API代码复制到CRON中,但随后我复制了代码,不允许机器人测试真正的API。
谢谢。
2条答案
按热度按时间sbdsn5lh1#
假设你仍然想使用会话,你的第一个curl应该是一个请求,一个脚本将创建会话,然后响应。
我创建了这个get_cookie. php this来测试这个概念:
我调用此脚本是为了从响应cookie中获取PHPSESSID
回复:
CRON作业URL,会话.php:
这是CRON作业脚本。
回复:
结果
"Time" ($_SESSION['TIME'])
总是与get_cookie. php中的时间相同。9bfwbjaz2#
谢谢你的帮助,但最终我的替代方法将是最简单和最有效的。以下是给其他有需要的人的答案...
要让外部PHP(通过CRON运行)测试内部PHP API(前端JavaScript通常通过 AJAX 与之通信),这是最简单的解决方案,包括传递查询变量和会话变量。
第1步:不要担心start_session()或传递任何查询变量,只需提前将所需内容添加到数组中即可。
第2步:捕获输出缓冲区并简单地包含PHP API文件:
(显然,CRON必须与website/API位于同一服务器上,否则您将不得不使用cURL和Cookie/Session/QueryVar-Arrays)