如何将 php 文件导入控制器并收集数据

Posted

技术标签:

【中文标题】如何将 php 文件导入控制器并收集数据【英文标题】:How to import php file to your controller and gather data 【发布时间】:2019-02-16 04:53:31 【问题描述】:

我的控制器。

public function showMonthlyReport($site_id, $report_id)

$reports = Report::where('report_id', $report_id)->firstOrFail();

$uptime = ???

return view('records', compact('site_id', 'report_id', 'reports', 'uptime'));


还有我的 UptimeRobot.php 参考 https://uptimerobot.com/api getMonitors()method

<?php 

$curl = curl_init();

curl_setopt_array($curl, array(
CURLOPT_URL => "https://api.uptimerobot.com/v2/getMonitors",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "Your Api Key",
CURLOPT_HTTPHEADER => array(
  "cache-control: no-cache",
  "content-type: application/x-www-form-urlencoded"
 ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

 if ($err) 
   echo "cURL Error #:" . $err;
 else 
$data = json_decode($response);
$custom_uptime = ($data->monitors[0]->custom_uptime_ratio);
$uptime = explode("-",$custom_uptime);


?>

ApiCommand.php

public function handle()
    
    include(app_path() . '/Includes/DeepCrawl.php');  
    include(app_path() . '/Includes/Uptime.php'); 
    include(app_path() . '/Includes/HelloAnalytics.php');

$stringData = ApiCommand::drawGraph($uptime, $dates, $users, $otherResultsRows, $array_issues, $array_pages_breakdown, $array_uncrawled_url, $array_non_200_pages, $array_orphaned_pages, $array_non_indexable_pages, $array_crawl_source_gap, $array_https_http);

Storage::disk('local')->put('hello.txt', $stringData);


目前正在构建一个 laravel 网络应用程序。

我只是想知道如何从 uptimerobot 收集数据。我将使用我的控制器,所以我可以将它传递给我的视图,但我不知道如何。我有下面的代码和上面的 curl php 类型。真的很困惑我在这里做什么新程序员。有人可以解释我是否走在正确的道路上,或者是否可以在控制器中进行。提前致谢。

【问题讨论】:

您可以将 curl 代码编写为控制器类中的私有函数,并像调用任何其他函数一样调用它 @RinsadAhmed 如果我做了上面的函数 $uptime = ???应该是 $uptime = uptimefunction();类似的东西? 好吧,既然你在一个班级里,你应该使用 $uptime = $this->uptimefunction(); 【参考方案1】:

我可以建议稍微不同的解决方案:

    在单独的console command 中提取您的 curl 代码并每分钟运行一次此命令(例如,作为cron job)。

    命令结果保存到数据库/文件/内存。

    在您的showMonthlyReport() 中引用现有结果。

好处:

通过这种方式,您不必等待每个showMonthlyReport() 的卷曲结果。所有代码都将异步运行 所有错误处理都集中在一个地方 命令是可测试的

【讨论】:

@PrisacariDimitrii 我已经尝试过并成功运行,但我不知道在哪里可以找到结果:/ @ChristianGallarmin 您可以尝试使用Storage 外观将其保存到文件并在showMonthlyReport() 运行时读取文件。详情请见laravel.com/docs/5.6/filesystem。 @PrisacariDimitrii 你能看看我的命令文件吗?将在上面编辑我的内容。 首先,我建议使用 Guzzle 客户端而不是裸 curl(请参阅相关问题:***.com/questions/22355828/…)其次,我会避免在您的命令中使用任何 includes。所有代码都应该作为服务写在你的 laravel 应用中。之后,您应该使用依赖注入在命令中注入服务。如果有任何问题,请在讨论超出范围时创建单独的问题。

以上是关于如何将 php 文件导入控制器并收集数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP CodeIgniter 将 CSV 数据导入 MYSQL 数据库?

php 导入/导出 csv 文件

如何使用 PHP 将大型 Excel 文件导入 MySql 数据库

如何快速导入大SQL文件到MySQL数据库

MYSQL如何导入数据库

需要通过 PHP 将大型 CSV 文件导入多个 MySQL 表的高效方法