【发布时间】:2018-11-20 18:50:20
【问题描述】:
我创建了一个非常简单的 PHP 爬虫,我想在 Laravel 项目中实现它。我不知道把它放在哪里.. 我想启动脚本并在应用程序启动时运行它。
我知道它不应该在控制器或 Cron 计划中,所以有什么建议在哪里设置它?
$homepage = 'https://example.com';
$already_crawled = [];
$crawling = [];
function follow_links($url){
global $already_crawled;
global $crawling;
$doc = new DOMDocument();
$doc->loadHTML(file_get_contents($url));
$linklist = $doc->getElementsByTagName('a');
foreach ($linklist as $link) {
$l = $link->getAttribute("href");
$full_link = 'https://example.com'.$l;
if (!in_array($full_link, $already_crawled)) {
$already_crawled[] = $full_link;
$crawling[] = $full_link;
echo $full_link.PHP_EOL;
// Insert data in the DB
}
}
array_shift($crawling);
foreach ($crawling as $link) {
follow_links($link);
}
}
follow_links($homepage);
【问题讨论】:
-
其实这不是个好主意。 Bcoz laravel 专为构建出色的 MVC 应用程序而设计。如果你想注入/连接一些
PHP Scripts,比如crawler或spider或bulk mailerEtc...,请分开这些文件并调用另一个thread或CRON JOB。不要将这些作业与 App 合并。 -
所以它不应该是 Laravel 应用程序的一部分,而是运行在服务器上的一个单独的应用程序?如果是这样,我怎样才能“让它飞”而不取消它?在我从终端启动脚本的那一刻,一切都很好,直到我决定发出另一个命令..
-
您可以将命令 nohup 与 & "nohup php path_to_script.php &" 一起使用。 & - 使其成为后台,nohup - 防止脚本执行在您关闭终端连接后停止。
-
如果出于某种原因我想停止脚本,我该怎么做?
-
@BanujanBalendrakumar 这真是个糟糕的建议。 Laravel 完全有能力完成这类事情,并且在 Laravel 中完成这一切有主要的好处 - 你可以通过这样做获得它的缓存、数据库、队列、日志记录等所有内置功能。
标签: php laravel web-crawler