以不同的时间间隔从主脚本运行多个PHP脚本

以不同的时间间隔从主脚本运行多个PHP脚本,php,web-scraping,Php,Web Scraping,有几个自定义的PHP脚本,我正在从我的浏览器运行,这些脚本将刮取任何给定的URL,并以浏览器中的表格或excel文件的形式返回数据。(可选) 问题是,每当我向脚本添加3个以上的URL时,我都会遇到网络连接错误(由对等方重置连接),这可能是由多种原因造成的。 然后,如果数据由表返回,则结果将被截断,如果由Excel文件返回,则下载文件将在特定点“网络错误”停止 我正在本地计算机(XAMPP)上运行脚本,并在多个实时服务器上测试了这些脚本,出现了相同的问题,但是,我注意到,在实时服务器上,连接将持续

有几个自定义的PHP脚本,我正在从我的浏览器运行,这些脚本将刮取任何给定的URL,并以浏览器中的表格或excel文件的形式返回数据。(可选)

问题是,每当我向脚本添加3个以上的URL时,我都会遇到网络连接错误(由对等方重置连接),这可能是由多种原因造成的。 然后,如果数据由表返回,则结果将被截断,如果由Excel文件返回,则下载文件将在特定点“网络错误”停止

我正在本地计算机(XAMPP)上运行脚本,并在多个实时服务器上测试了这些脚本,出现了相同的问题,但是,我注意到,在实时服务器上,连接将持续更长时间。我从主机提供商那里得到一个警告,脚本不应该再在他们的服务器上运行,因为它使用了大量内存(+1GB RAM),并且正在减慢他们的速度。我假设我将在本地主机上恢复测试

问题:

  • 是否有任何配置/建议可防止错误“由对等方重置连接”

  • 我有超过80个网址(同一个域),我想每周刮。将脚本拆分为80个脚本(每个脚本包含1个URL),并独立运行每个脚本。不是很实用,但是什么是一个好的方法/Php脚本,可以在主脚本上以60秒的时间间隔一个接一个地运行多个脚本

  • 下面是我输入URL的一段代码:

    <?php 
    //to do link
    $OutPut_Excel = $_GET['xls'];// 0 web page or 1 output excel
    $show_Name = $_GET['show'];// 0 or 1
    $urls = "http://www.URL1.com;
    http://www.URL2.com;
    http://www.URL3.com;
    http://www.URL4.com;
    http://www.URL5.com;
    http://www.URL6.com;
    http://www.URL7.com
    ";
    //output excel
    if($OutPut_Excel == "1")
    {
    header("Content-Type: application/vnd.ms-execl;charset=iso-8859-1");
    header("Content-Disposition: attachment; filename=data.xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    }
    
    set_time_limit(0);
    ini_set('memory_limit', '-1');
    ini_set('display_errors',true);
    
    
    //output html
    if($OutPut_Excel == "0")
    {
    ?>
    
    <html>
    <head> 
    title>scraper</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    
    <body>
    <?php
    }
    
    if($OutPut_Excel == "0")
    {
    if($show_Name)
    {
        $nametext = '<td>Name</td>';
    }
    echo "<table border='1'><tr><td>Name</td><td>Code</td>
    <td>City</td><td>Address</td><td>E-mail</td><td>Phone/td>  <td>Url</td>$nametext</tr>";
    
    
    标题>刮刀
    
    关于第二个问题,您可以编写一个循环,执行第二个脚本或函数来检索URL。您应该有一个数组,其中包含要刮取的所有链接,并为每个链接运行该函数或脚本,每次运行后休眠60秒。这只是我头脑中的示例代码,未经测试:

    $links = array('URL1', 'URL2', ...);
    foreach ($link as $l) {
      runScraper($l);
      sleep(60);
    }
    
    runScraper方法可以调用system()或exec()在另一个PHP进程中运行脚本


    关于您得到的错误,这可能是由于对服务器的请求过多。在如此短的时间内,您尝试访问的服务器可能会在N个页面请求后阻止您。

    1 GB内存?您确定正确管理了变量吗?无论如何,php.ini中有一个config参数限制了脚本可以使用的RAM数量,还有一个用于执行时间的参数。我想这就是停止你的脚本的原因。谢谢Naryl,我会看看它。我更改了执行时间和内存限制,但仍然有相同的问题。通过主机服务器可以重置连接。有没有关于逐个运行所有脚本的提示?您可以使用
    system()
    函数来运行每个脚本。它将等待一个脚本完成后再开始执行下一个脚本。@RajaKhoury您的代码中有一个输入错误:title>scraper您缺少title标记的开头。这与错误无关,但您有一个输入错误:)