+--------------------------------------------------------------------+
*/
+use GuzzleHttp\Client;
+
/**
*
* @package CRM
return $messages;
}
+ /**
+ * Check if file exists on given URL.
+ *
+ * @param $url
+ * @return bool
+ * @throws \GuzzleHttp\Exception\GuzzleException
+ */
+ public function fileExists($url, $timeout = 0.25) {
+ $fileExists = FALSE;
+ try {
+ $guzzleClient = new GuzzleHttp\Client();
+ $guzzleResponse = $guzzleClient->request('GET', $url, array(
+ 'timeout' => $timeout,
+ ));
+ $fileExists = ($guzzleResponse->getStatusCode() == 200);
+ }
+ catch (Exception $e) {
+ echo $e->getMessage();
+ }
+ return $fileExists;
+ }
+
}
1 => $phpVersion,
2 => CRM_Upgrade_Incremental_General::RECOMMENDED_PHP_VER,
)),
- ts('PHP Up-to-Date'),
- \Psr\Log\LogLevel::INFO,
- 'fa-server'
+ ts('PHP Up-to-Date'),
+ \Psr\Log\LogLevel::INFO,
+ 'fa-server'
);
}
elseif (version_compare($phpVersion, CRM_Upgrade_Incremental_General::MIN_RECOMMENDED_PHP_VER) >= 0) {
1 => $phpVersion,
2 => CRM_Upgrade_Incremental_General::RECOMMENDED_PHP_VER,
)),
- ts('PHP Out-of-Date'),
- \Psr\Log\LogLevel::NOTICE,
- 'fa-server'
+ ts('PHP Out-of-Date'),
+ \Psr\Log\LogLevel::NOTICE,
+ 'fa-server'
);
}
elseif (version_compare($phpVersion, CRM_Upgrade_Incremental_General::MIN_INSTALL_PHP_VER) >= 0) {
2 => CRM_Upgrade_Incremental_General::MIN_RECOMMENDED_PHP_VER,
3 => CRM_Upgrade_Incremental_General::RECOMMENDED_PHP_VER,
)),
- ts('PHP Out-of-Date'),
- \Psr\Log\LogLevel::WARNING,
- 'fa-server'
+ ts('PHP Out-of-Date'),
+ \Psr\Log\LogLevel::WARNING,
+ 'fa-server'
);
}
else {
2 => CRM_Upgrade_Incremental_General::MIN_RECOMMENDED_PHP_VER,
3 => CRM_Upgrade_Incremental_General::RECOMMENDED_PHP_VER,
)),
- ts('PHP Out-of-Date'),
- \Psr\Log\LogLevel::ERROR,
- 'fa-server'
+ ts('PHP Out-of-Date'),
+ \Psr\Log\LogLevel::ERROR,
+ 'fa-server'
);
}
1 => 'https://civicrm.org/blog/totten/psa-please-verify-php-extension-mysqli',
2 => 'mysqli',
)),
- ts('Forward Compatibility: Enable "mysqli"'),
- \Psr\Log\LogLevel::WARNING,
- 'fa-server'
+ ts('Forward Compatibility: Enable "mysqli"'),
+ \Psr\Log\LogLevel::WARNING,
+ 'fa-server'
);
}
// Does arrow.png exist where we expect it?
$arrowUrl = CRM_Core_Config::singleton()->userFrameworkResourceURL . 'packages/jquery/css/images/arrow.png';
- $headers = get_headers($arrowUrl);
- $fileExists = stripos($headers[0], "200 OK") ? 1 : 0;
- if ($fileExists === FALSE) {
+ if ($this->fileExists($arrowUrl) === FALSE) {
$messages[] = new CRM_Utils_Check_Message(
__FUNCTION__,
ts('The Resource URL is not set correctly. Please set the <a href="%1">CiviCRM Resource URL</a>.',
if (count($log_path) > 1) {
$url[] = $log_path[1];
$log_url = implode($filePathMarker, $url);
- $headers = @get_headers($log_url);
- if (stripos($headers[0], '200')) {
+ if ($this->fileExists($log_url)) {
$docs_url = $this->createDocUrl('checkLogFileIsNotAccessible');
$msg = 'The <a href="%1">CiviCRM debug log</a> should not be downloadable.'
. '<br />' .
2 => $privateDir,
3 => $heuristicUrl,
)),
- ts('Private Files Readable'),
- \Psr\Log\LogLevel::WARNING,
- 'fa-lock'
+ ts('Private Files Readable'),
+ \Psr\Log\LogLevel::WARNING,
+ 'fa-lock'
);
}
}
return FALSE;
}
- $headers = @get_headers("$url/$file");
- if (stripos($headers[0], '200')) {
+ if ($this->fileExists("$url/$file")) {
$content = @file_get_contents("$url/$file");
if (preg_match('/delete me/', $content)) {
$result = TRUE;
--- /dev/null
+<?php
+
+/**
+ * Class CRM_Utils_Check_Component_EnvTest
+ * @package CiviCRM
+ * @subpackage CRM_Utils_Type
+ * @group headless
+ */
+class CRM_Utils_Check_Component_EnvTest extends CiviUnitTestCase {
+
+ public function setUp() {
+ parent::setUp();
+ }
+
+ /**
+ * File check test should fail if reached maximum timeout.
+ * @throws \GuzzleHttp\Exception\GuzzleException
+ */
+ public function testResourceUrlCheck() {
+ $check = new \CRM_Utils_Check_Component_Env();
+ $failRequest = $check->fileExists('https://civicrm.org', 0.001);
+ $successRequest = $check->fileExists('https://civicrm.org', 0);
+
+ $this->assertEquals(FALSE, $failRequest, 'Request should fail for minimum timeout.');
+ $this->assertEquals(TRUE, $successRequest, 'Request should not fail for infinite timeout.');
+
+ }
+
+}