我今天遇到了一个问题,我找不到解决办法。
我必须对从.csv文件中获取的数据进行一些统计。
这些.csv文件的路径是动态的,取决于5个变量,所以我有一个循环来获取我需要的所有url。
最后我有大约540个网址要测试。我正在使用此功能
public static function remoteFileExists( $url )
{
$curl = curl_init( $url );
curl_setopt( $curl, CURLOPT_NOBODY, true );
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec( $curl );
$ret = false;
if ( $result !== false ) {
$statusCode = curl_getinfo( $curl, CURLINFO_HTTP_CODE );
if ( $statusCode == 200 || $statusCode == 302 ) {
$ret = true;
}
}
curl_close( $curl );
return $ret;
}
该功能完美无缺,但目前需要40-60秒来测试我的所有网址。这花费了太多时间。
有没有人有解决方案来减少这段时间?
我已经尝试使用get_headers功能,需要相同的时间。
我也试过这个功能:
public function remote_file_exists($url){
return(bool)preg_match('~HTTP/1\.\d\s+200\s+OK~', @current(get_headers($url)));
}
同样的问题,需要花费太多时间。
答案 0 :(得分:0)
最后我在本地进行了检查,有2个不同的站点,但它们存储在同一台服务器上。 所以我用本地电话进行检查,例如' / var /...../..../ files /.../ file.csv
我将加载时间从40-60秒减少到4秒。 目前它有效,但我在思考,如果有一天我将这个2网站放在不同的服务器上,那么什么是最好的解决方案。
答案 1 :(得分:-1)
只需设置适合您的超时时间:
public interface IYourInterface //Give it a good name
{
void Instantiate(ServiceProvider serviceProvider, DeviceCapability deviceCapability);
}
public class YourClass : IYourInterface
{
public YourClass()
{
// do something if you want
}
public void Instantiate (ServiceProvider serviceProvider, DeviceCapability deviceCapability)
{
// what ever needs to be done here
}
}
private void CreateManager<T>(ServiceProvider serviceProvider, DeviceCapability deviceCapability)
where T : IYourInterface, new()
{
var instance = new T();
instance.Instantiate(serviceProvider, deviceCapability);
}
/*
Usage
*/
CreateManager<YourClass>(serviceProvider, deviceCapability);