dirname相关知识
-
php简单创建多级目录方法-:$test = "a/b/c/d" ;$b = array($test);while(dirname($test) && dirname($test)!='.'){array_unshift($b,dirname($test));$test = dirname($test);}foreach($b as $c){mkdir($c);}方法二:function mkdirs($dir) { if(!is_dir($dir)) { if(!mkdirs(dirname($dir))){ return false; } if(!mkdir($dir,0777)){ return false; } } return true; } mkdirs('div/css/layout'
-
php循环删除目录及目录下的文件分享两个使用函数:php循环删除目录及目录下的文件和仅删除指定目录下的文件,不删除目录文件夹!代码一:php循环删除目录及目录下的文件<?php//循环删除目录和文件函数function delDirAndFile( $dirName ){if ( $handle = opendir( "$dirName" ) ) {while ( false !== ( $item = readdir( $handle ) ) ) {if ( $item != "." && $item != ".." ) {if ( is_dir( "$dirName/$item" ) ) {delDirAndFile( "$dirName/$item" );} else {if( unlink( "$dirName/$item" ) )echo "成功删除文件: $dirN
-
PHP删除指定文件夹以及文件夹下的目录文件直接上代码:public function delDir(){ $dirName = $_SERVER['DOCUMENT_ROOT'].'/目录'; $this->delDirAndFile($dirName); } function delDirAndFile( $dirName ){ if($handle=opendir($dirName)){ while(false!==($item=readdir($handle))){ &n
-
TP5 __STATIC__缺失public的解决方案原有预定义资源路径STATIC在路径中未包含缺少public目录 使用系统变量获取当前脚本路径 $_SERVER['SCRIPT_NAME'] http://localhost/项目/public/index.php dirname() 函数返回路径中的目录部分 dirname($_SERVER['SCRIPT_NAME']); http://localhost/项目/public 在应用下配置文件config.php中第141行,更改如下 // 视图输出字符串内容替换 'view_replace_str' => [ '__PUBLIC__' => dirname($_SERVER['SCRIPT_NAME']), '__STATIC__' => dirname($_SERVER['SCRIPT_NAME']) .
dirname相关课程
dirname相关教程
- 3.2 赋值规范 变量与值直接使用 “=” 连接,等号两边不能存在空白字符;例如: dirname = "/tmp" 赋值方法就是错误的。如果值中有空白字符,使用单引号或双引号引起来,双引号对于其中引用的值将会根据其内容转化,单引号内的特殊字符则一律当字符串进行处理;例如:DIRNAME="$PATH" 的值为系统 PATH 实际的可执行文件路径,DIRNAME='$PATH' 的值为 $PATH 的字符串。可用 \ 来转译变量,让其变为一般字符;例如:DIRNAME=\$PATH 的值为 $PATH 的字符串。如果变量的值为指令,可用使用反撇号,或 $() 来引用;例如:下面两个是一样的 DATE=`date`DATE=$(date)在脚本中定义普通字符串变量时,应尽量把变量的内容用双引号括起来;例如:DIRNAME="/tmp"单纯数字的变量内容可以不加引号;例如:NUM=10
- 3.1 命名规范 变量命名只能使用英文字母,数字和下划线,首字母不能以数字开头例如正常变量:BASE_DIR,File_Name,AEG3,_DIR 等都是正常的变量无效变量:1file,#dir变量名中间不能使用空格或标点符号例如:DIR FILE,DIR?FILE 就为无效变量变量命名不能使用 base 里面的关键字(help 来查看关键字)Shell 变量大小写敏感,也就是定义为大写的变量名,引用的时候必须完全一致。例如:DIRNAME 和 dirname 就是两个不同的变量
- 1. Scrapy 的 <code>settings.py</code> 配置 从前面的学习中我们知道,settings.py 是 Scrapy 使用 startproject 命令生成的,这里的配置会默认覆盖 Scrapy 内置的配置项,这些默认的配置项都位于 Scrapy 的 scrapy/settings/default_settings.py 中:Scrapy的默认配置文件我们来看看 default_settings.py 中的一些默认配置项。AJAXCRAWL_ENABLED:通用爬取经常会抓取大量的 index 页面;AjaxCrawlMiddleware 能帮助我们正确地爬取,AJAXCRAWL_ENABLED 配置正是开启该中间件的开关。由于有些性能问题,且对于特定爬虫没有什么意义,该中间默认关闭;自动限速扩展 (AutoThrottle):这类配置主要是以 Scrapy 爬虫以及正在抓取网站的负载来自动优化爬取速度。它能自动调整 Scrapy 达到最佳的爬取速度,使用者无需自己设置下载延迟,只要设置好最大并发请求数即可。来看看有关该扩展的配置项:AUTOTHROTTLE_ENABLED = False # 默认关闭 AUTOTHROTTLE_DEBUG = False # 关闭调试 AUTOTHROTTLE_MAX_DELAY = 60.0 # 最高下载延迟 AUTOTHROTTLE_START_DELAY = 5.0 # 初始化下载延迟 AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 # Scrapy 同时请求目标网站的平均请求数下面四个配置用于设置爬虫自动关闭条件:CLOSESPIDER_TIMEOUT:一个整数值,单位为秒。如果一个 spider 在指定的秒数后仍在运行, 它将以 closespider_timeout 的原因被自动关闭。 如果值设置为0 (或者没有设置),spiders 不会因为超时而关闭;CLOSESPIDER_ITEMCOUNT:一个整数值,指定条目的个数。如果 spider 爬取条目数超过了设置的值, 并且这些条目通过 item pipelines 传递,spider 将会以 closespider_itemcount 的原因被自动关闭;CLOSESPIDER_PAGECOUNT:一个整数值,指定最大的抓取响应 (reponses) 数。 如果 spider 抓取数超过指定的值,则会以 closespider_pagecount 的原因自动关闭。 如果设置为0(或者未设置),spiders不会因为抓取的响应数而关闭;CLOSESPIDER_ERRORCOUNT:一个整数值,指定spider可以接受的最大错误数。 如果spider生成多于该数目的错误,它将以 closespider_errorcount 的原因关闭。 如果设置为0(或者未设置),spiders不会因为发生错误过多而关闭;以上四个参数在 default_settings.py 中设置的默认值都是0并发相关,的设置会较大影响 Scrapy 爬虫的性能。下面是默认的配置值,其中都已经进行了详细的注释说明:# pipelines中并发处理items数CONCURRENT_ITEMS = 100# scrapy中并发下载请求数CONCURRENT_REQUESTS = 16# 对任何单个域执行的并发请求的最大数量CONCURRENT_REQUESTS_PER_DOMAIN = 8# 将对任何单个IP执行的并发请求的最大数量。如果非零CONCURRENT_REQUESTS_PER_IP = 0Cookie相关配置:# 是否启用cookiesmiddleware。如果关闭,cookies将不会发送给web serverCOOKIES_ENABLED = True# 如果启用,Scrapy将记录所有在request(cookie 请求头)发送的cookies及response接收到的cookies(set-cookie接收头),这也会间接影响性能,因此默认关闭。COOKIES_DEBUG = False请求深度相关配置,比如 DEPTH_LIMIT 设置请求允许的最大深度。如果为 0 ,则表示不受限;DEPTH_STATS_VERBOSE 参数控制是否收集详细的深度统计信息;如果启用此选项,则在统计信息中收集每个深度的请求数。DEPTH_PRIORITY 参数用于根据深度调整请求优先级。来看看他们的默认设置:DEPTH_LIMIT = 0DEPTH_STATS_VERBOSE = FalseDEPTH_PRIORITY = 0DNS 相关配置。DNSCACHE_ENABLED 用于控制是否启用 DNS 缓存,DNSCACHE_SIZE参数设置缓存大小,DNS_TIMEOUT 处理 DNS 查询超时时间;我们来具体看看 default_settings.py 中的默认配置:DNSCACHE_ENABLED = TrueDNSCACHE_SIZE = 10000# 缓存解析器DNS_RESOLVER = 'scrapy.resolver.CachingThreadedResolver'DNS_TIMEOUT = 60下载器相关。这部分的配置比较多,也是主要影响性能的地方。我们对一些关键的配置进行说明,具体如下:DOWNLOAD_DELAY:下载器在从同一网站下载连续页面之前应等待的时间,通过该配置可以限制爬虫的爬取速度。此外,该设置也受RANDOMIZE_DOWNLOAD_DELAY 设置(默认情况下启用)的影响。DOWNLOAD_TIMEOUT:下载超时时间;DOWNLOAD_MAXSIZE:下载器将下载的最大响应大小;DOWNLOAD_HANDLERS_BASE:处理不同类型下载的下载器;DOWNLOAD_FAIL_ON_DATALOSS:数据丢失后是否继续下载;DOWNLOADER_MIDDLEWARES 和DOWNLOADER_MIDDLEWARES_BASE:分别表示自定义的下载中间件类和默认的下载中间件类;DOWNLOADER_STATS:是否启用下载器统计信息收集。来看看 default_settings.py 中的默认配置,具体如下:DOWNLOAD_DELAY = 0DOWNLOAD_HANDLERS = {}DOWNLOAD_HANDLERS_BASE = { 'data': 'scrapy.core.downloader.handlers.datauri.DataURIDownloadHandler', 'file': 'scrapy.core.downloader.handlers.file.FileDownloadHandler', 'http': 'scrapy.core.downloader.handlers.http.HTTPDownloadHandler', 'https': 'scrapy.core.downloader.handlers.http.HTTPDownloadHandler', 's3': 'scrapy.core.downloader.handlers.s3.S3DownloadHandler', 'ftp': 'scrapy.core.downloader.handlers.ftp.FTPDownloadHandler',}DOWNLOAD_TIMEOUT = 180 # 3minsDOWNLOAD_MAXSIZE = 1024 * 1024 * 1024 # 1024mDOWNLOAD_WARNSIZE = 32 * 1024 * 1024 # 32mDOWNLOAD_FAIL_ON_DATALOSS = TrueDOWNLOADER = 'scrapy.core.downloader.Downloader'DOWNLOADER_HTTPCLIENTFACTORY = 'scrapy.core.downloader.webclient.ScrapyHTTPClientFactory'DOWNLOADER_CLIENTCONTEXTFACTORY = 'scrapy.core.downloader.contextfactory.ScrapyClientContextFactory'DOWNLOADER_CLIENT_TLS_CIPHERS = 'DEFAULT'# Use highest TLS/SSL protocol version supported by the platform, also allowing negotiation:DOWNLOADER_CLIENT_TLS_METHOD = 'TLS'DOWNLOADER_CLIENT_TLS_VERBOSE_LOGGING = FalseDOWNLOADER_MIDDLEWARES = {}DOWNLOADER_MIDDLEWARES_BASE = { # Engine side 'scrapy.downloadermiddlewares.robotstxt.RobotsTxtMiddleware': 100, 'scrapy.downloadermiddlewares.httpauth.HttpAuthMiddleware': 300, 'scrapy.downloadermiddlewares.downloadtimeout.DownloadTimeoutMiddleware': 350, 'scrapy.downloadermiddlewares.defaultheaders.DefaultHeadersMiddleware': 400, 'scrapy.downloadermiddlewares.useragent.UserAgentMiddleware': 500, 'scrapy.downloadermiddlewares.retry.RetryMiddleware': 550, 'scrapy.downloadermiddlewares.ajaxcrawl.AjaxCrawlMiddleware': 560, 'scrapy.downloadermiddlewares.redirect.MetaRefreshMiddleware': 580, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 590, 'scrapy.downloadermiddlewares.redirect.RedirectMiddleware': 600, 'scrapy.downloadermiddlewares.cookies.CookiesMiddleware': 700, 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 750, 'scrapy.downloadermiddlewares.stats.DownloaderStats': 850, 'scrapy.downloadermiddlewares.httpcache.HttpCacheMiddleware': 900, # Downloader side}DOWNLOADER_STATS = TrueDUPEFILTER_CLASS:指定去重类;DUPEFILTER_CLASS = 'scrapy.dupefilters.RFPDupeFilter'自定义扩展和内置扩展配置:EXTENSIONS = {}EXTENSIONS_BASE = { 'scrapy.extensions.corestats.CoreStats': 0, 'scrapy.extensions.telnet.TelnetConsole': 0, 'scrapy.extensions.memusage.MemoryUsage': 0, 'scrapy.extensions.memdebug.MemoryDebugger': 0, 'scrapy.extensions.closespider.CloseSpider': 0, 'scrapy.extensions.feedexport.FeedExporter': 0, 'scrapy.extensions.logstats.LogStats': 0, 'scrapy.extensions.spiderstate.SpiderState': 0, 'scrapy.extensions.throttle.AutoThrottle': 0,}文件存储相关:FILES_STORE_S3_ACL = 'private'FILES_STORE_GCS_ACL = ''FTP 服务配置, Scrapy 框架内置 FTP 下载程序。我们可以指定 FTP 的相关参数:FTP_USER = 'anonymous'FTP_PASSWORD = 'guest'FTP_PASSIVE_MODE = TrueHTTP 缓存相关配置。Scrapy 的 HttpCacheMiddleware 组件(默认情况下没有启用)提供了一个底层的对HTTP请求和响应的缓存。如果启用的话(把HTTPCACHE_ENABLED设置为True),它会缓存每个请求和对应的响应。来看看和其相关的配置和含义:# 是否启用http缓存HTTPCACHE_ENABLED = False# 缓存数据目录HTTPCACHE_DIR = 'httpcache'HTTPCACHE_IGNORE_MISSING = False# 缓存存储的插件HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'# 缓存过期时间HTTPCACHE_EXPIRATION_SECS = 0HTTPCACHE_ALWAYS_STORE = False# 缓存忽略的Http状态码HTTPCACHE_IGNORE_HTTP_CODES = []HTTPCACHE_IGNORE_SCHEMES = ['file']HTTPCACHE_IGNORE_RESPONSE_CACHE_CONTROLS = []HTTPCACHE_DBM_MODULE = 'dbm'# 设置缓存策略,DummyPolicy是所有请求均缓存,下次在请求直接访问原来的缓存即可HTTPCACHE_POLICY = 'scrapy.extensions.httpcache.DummyPolicy'# 是否启用缓存数据压缩HTTPCACHE_GZIP = FalseItem 和 Item pipelines相关配置:# ITEM处理器ITEM_PROCESSOR = 'scrapy.pipelines.ItemPipelineManager'# 自定义的 item pipelinesITEM_PIPELINES = {}ITEM_PIPELINES_BASE = {}日志相关的配置:# 启动日志功能LOG_ENABLED = True# 日志编码LOG_ENCODING = 'utf-8'# 日志格式器LOG_FORMATTER = 'scrapy.logformatter.LogFormatter'# 日志格式LOG_FORMAT = '%(asctime)s [%(name)s] %(levelname)s: %(message)s'# 日志时间格式LOG_DATEFORMAT = '%Y-%m-%d %H:%M:%S'LOG_STDOUT = False# 日志级别LOG_LEVEL = 'DEBUG'# 指定日志输出文件LOG_FILE = NoneLOG_SHORT_NAMES = False邮件配置:在 Scrapy 中提供了邮件功能,该功能使用十分简便且采用了 Twisted 非阻塞模式,避免了对爬虫的影响。我们只需要在 Scrapy 中进行简单的设置,就能通过 API 发送邮件。邮件的默认配置项如下:MAIL_HOST = 'localhost'MAIL_PORT = 25MAIL_FROM = 'scrapy@localhost'MAIL_PASS = NoneMAIL_USER = None我们现在可以简单的使用下 Scrapy 给我们提供的邮件类,来利用它给我们自己发送一封邮件。首先需要找下自己的 qq 邮箱或者其他邮箱,开启 POP3/SMTP服务,然后我们可以得到一个授权码。这个就是我们登陆这个邮箱服务的密码。然后我们配置 settings.py 中的相应项:MAIL_HOST = 'smtp.qq.com'MAIL_PORT = 25MAIL_FROM = '2894577759@qq.com'MAIL_PASS = '你的授权码'MAIL_USER = '2894577759@qq.com'接下来我们在 scrapy shell 中来调用相应的邮件接口,发送邮件:(scrapy-test) [root@server china_pub]# scrapy shell --nolog[s] Available Scrapy objects:[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)[s] crawler <scrapy.crawler.Crawler object at 0x7f1c3d4e9100>[s] item {}[s] settings <scrapy.settings.Settings object at 0x7f1c3d4e6dc0>[s] Useful shortcuts:[s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)[s] fetch(req) Fetch a scrapy.Request and update local objects [s] shelp() Shell help (print this help)[s] view(response) View response in a browser>>> from scrapy.mail import MailSender>>> mailer = MailSender().from_settings(settings)>>> mailer.send(to=["2894577759@qq.com"], subject="这是一个测试", body="来自百度云主机发送的一封邮件", cc=["2894577759@qq.com"])<Deferred at 0x7f1c3c4d1c40>调用 Scrapy 的邮件接口发送邮件内存相关参数:MEMDEBUG_ENABLED = False # enable memory debuggingMEMDEBUG_NOTIFY = [] # send memory debugging report by mail at engine shutdownMEMUSAGE_CHECK_INTERVAL_SECONDS = 60.0# 是否启用内存使用扩展MEMUSAGE_ENABLED = True# 在关闭Scrapy之前允许的最大内存量,为0则不检查MEMUSAGE_LIMIT_MB = 0# 要达到内存限制时通知的电子邮件列表MEMUSAGE_NOTIFY_MAIL = []# 在发送警告电子邮件通知之前,要允许的最大内存量(以兆字节为单位)。如果为零,则不会产生警告MEMUSAGE_WARNING_MB = 0调度器相关配置:# 调度器类SCHEDULER = 'scrapy.core.scheduler.Scheduler'# 指定调度器的三种队列类SCHEDULER_DISK_QUEUE = 'scrapy.squeues.PickleLifoDiskQueue'SCHEDULER_MEMORY_QUEUE = 'scrapy.squeues.LifoMemoryQueue'SCHEDULER_PRIORITY_QUEUE = 'scrapy.pqueues.ScrapyPriorityQueue'# 正在处理响应数据的软限制(以字节为单位),如果所有正在处理的响应的大小总和高于此值,Scrapy不会处理新的请求SCRAPER_SLOT_MAX_ACTIVE_SIZE = 5000000spider 中间件相关配置,有我们熟悉的 SPIDER_MIDDLEWARES 和 SPIDER_MIDDLEWARES_BASE,表示自定义的 Spider 中间件和 Scrapy 内置的 Spider 中间件;SPIDER_MIDDLEWARES = {}SPIDER_MIDDLEWARES_BASE = { # Engine side 'scrapy.spidermiddlewares.httperror.HttpErrorMiddleware': 50, 'scrapy.spidermiddlewares.offsite.OffsiteMiddleware': 500, 'scrapy.spidermiddlewares.referer.RefererMiddleware': 700, 'scrapy.spidermiddlewares.urllength.UrlLengthMiddleware': 800, 'scrapy.spidermiddlewares.depth.DepthMiddleware': 900, # Spider side}指定模板文件目录,这个在使用 scrapy startproject 项目名 命令创建项目时,对应的模板文件所在的目录:TEMPLATES_DIR = abspath(join(dirname(__file__), '..', 'templates'))USER_AGENT:设置请求头的 User-Agent 参数,用来模拟浏览器。我们通常都会添加一个浏览器的 User-Agent 值,防止爬虫直接被屏蔽;Scrapy 的大体配置就是这些,还有一些没有介绍到的参数,课后可以仔细查看官方文档进行了解。
- 38 Ruby的prepend和prepened 专为面向对象编程所设计的 Ruby 语言
- 实际业务场景下 Hystrix 资源隔离实战 还不会 Hystrix ?那就赶快来学习吧!
- 5. 实战:接口拦截与路由处理 移动端架构师电子书
dirname相关搜索
-
daima
damain
dart
dataset
datasource
datediff
datediff函数
datepicker
datetime
db4o
dbi
dcloud
deallocate
debian安装
debugger
debugging
declaration
declarations
declare
decode函数