Как мне просмотреть файлы веб-сайтов CSV и использовать curl для проверки их работы в Интернете? - PullRequest
0 голосов
/ 18 декабря 2018

Этот php-скрипт cron job находит файл csv на моем сервере, а затем перебирает URL-адреса на нем.Он пытается проверить, загружен ли он через https или http или отключен через curl.Этот запрос curl может занимать слишком много времени.Я сделал это по почте через ajax, и это завершает работу, но мне нужно было сделать это с помощью задания cron и файла csv.Есть ли другие возможные решения?

Можете ли вы найти причину, по которой он не выполняет задачу?

Будет полезна любая помощь.

function url_test($url){

  $timeout = 20;
  $ch = curl_init();
  curl_setopt ($ch, CURLOPT_HEADER  , true);  // we want headers
  curl_setopt($ch, CURLOPT_NOBODY  , true);  // we don't need body
  curl_setopt ( $ch, CURLOPT_URL, $url );
  curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 );
  curl_setopt ( $ch, CURLOPT_TIMEOUT, $timeout );
  $http_respond = curl_exec($ch);
  $http_respond = trim( strip_tags( $http_respond ) );
  $http_code = curl_getinfo( $ch, CURLINFO_HTTP_CODE );


  if ( ( $http_code == "200" ) || ( $http_code == "301")) {

    return true;
  } else {

    return false;

  }

}

// запускается на каждом URL

$offline = 0;
$fullcount = 0;
if (($handle = fopen("/pathtocsv/".$csv, "r")) !== FALSE)
  {
  while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
  {
      $num = count($data);
      for ($c = 0; $c < $num; $c++)
        {

         $https = "https://".$data[$c];
         $https = strtolower($https);

         $http = "http://".$data[$c];
         $http = strtolower($http);

         $http = preg_replace('/\s+/', '', $http);
         $https = preg_replace('/\s+/', '', $https);


      $site = $data[$c];


     if(url_test($https)) 
      { 
        $fullcount++;
          echo $https. " <br>";

          ?>

          <?php
      }
      else if(url_test($http))
      {
        $fullcount++;
          echo $http. " <br>";
          ?>

          <?php
      }else{

           echo $site. " <br>";

          $mysqltime = date("Y-m-d H:i:s", $phptime);
          try
            {
            $conn = new PDO("conn info here);

            // set the PDO error mode to exception

            $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $sql = $conn->prepare($sql);

            $sql = "INSERT INTO table (url,csv,related)
                VALUES ('$site','$csv',1)";

            // use exec() because no results are returned

            $conn->exec($sql);
            echo "New record created successfully";
            }

          catch(PDOException $e)
            {
            echo "Connection failed: " . $e->getMessage();
            }

          }
         curl_close( $ch );

      }

1 Ответ

0 голосов
/ 18 декабря 2018

Вы можете использовать функцию get_headers (). ссылка

Будет возвращен ответ, подобный:

Array
(
    [0] => HTTP/1.1 200 OK
    [1] => Date: Sat, 29 May 2004 12:28:13 GMT
    [2] => Server: Apache/1.3.27 (Unix)  (Red-Hat/Linux)
    [3] => Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
    [4] => ETag: "3f80f-1b6-3e1cb03b"
    [5] => Accept-Ranges: bytes
    [6] => Content-Length: 438
    [7] => Connection: close
    [8] => Content-Type: text/html
)

, который можно использовать для проверки по мере необходимости.

Почему не выполняется задание, которое вы запускаете?Вы проверили журналы ошибок.

...