海外主机测评

您现在的位置是:首页 > 数据库 > 正文

数据库

关于method_exists的信息

cds8202023-08-30数据库45
本文目录一览:1、用ABAP语言实现查询一个文档在一个路径下是否存在2、nomoresimqle什么意思3、java中Servlet上传文件到服务器指定目录,报路径不存在的错误

本文目录一览:

  • 1、用ABAP语言实现查询一个文档在一个路径下是否存在
  • 2、no more simqle什么意思
  • 3、java中Servlet上传文件到服务器指定目录,报路径不存在的错误,我QQ,394576483
  • 4、触动精灵怎么复制文本里指定的一段文字?
  • 5、laravel 怎么检测队列是否执行
  • 6、JAVA 如何一次下载多个文件

用ABAP语言实现查询一个文档在一个路径下是否存在

用下面的代码,lf_file里传入文件的绝对路径,如果文件不存在,exceptiONs和result会返回对应的提示信息,代码如下:

CALL METHOD cl_gui_frontend_services=file_exist

EXPORTING

file = lf_file

RECEIVING

result = lf_file_exists

EXCEPTIONS

cntl_error = 1

error_no_gui = 2

wrong_parameter = 3

not_supported_by_gui = 4

OTHERS = 5.

IF sy-subrc = 0 AND lf_file_exists IS INITIAL.

MESSAGE e398(00) WITH '文件不存在' '' '' '' .

ENDIF.

no more simqle什么意思

没有这个单词”simqle“,正确的拼写是”simple“。

no more simple

不再简单

例句:

1.No more simple ding to indicate the arrival of an e-mail regardless of recipient, sender, or subject.

不再是仅播放ding这样简单的声音来表示您收到了邮件,而不管它的收件人和发件人以及主题是什么。

2.Comparing with DMO in constant velocity, DMO in any V ( z) is more close to real geologic condition, its pulse response is no more simple “ SMILE ” ellipse and difficult express in analytic expression in a condition of velocity field.

石油地球物理勘探,2001,36(6):665~671本文在对常速频域DMO和倾角分解DMO进行分析的基础上,对任意V(z)DMO进行了初步探讨。与常速DMO相比,任意V(z)DMO更接近实际地质情况,其脉冲响应不再是简单的SMILE椭圆,依据速度场情况,其响应很难用解析式表达。

3.As I watch Europe 's leaders stumbling through the debt crisis I am increasingly persuaded that this is no more than a simple description of present reality.

看到欧洲领导人在债务危机中磕磕绊绊的样子,我越来越相信,这就是对当前现实的一种描述。

java中Servlet上传文件到服务器指定目录,报路径不存在的错误,我QQ,394576483

可以在程序中判断一下该目录是否存在,如果不存在,创建目录。

File f = new File("D:\\apache-tomcat-6.0.20\\webapps\\up1\\WEB-INFO\\files");

if(!f.exists()){

f.mkdirs();

}

另外,你这个路径不太好,如果你的war包部署在tomcat上,是没有解开成一个目录,那文件上传肯定会失败。 建议你换一个实际存在的目录,用来存放文件。

触动精灵怎么复制文本里指定的一段文字?

触动精灵脚本开发手册

目录

前言

学习前的准备

越狱及 root 常识

Lua 基础简明教程

脚本开发取色技巧

小白学触动零基础视频教程

触动精灵开发者指南

触动产品功能对比

如何查看更多文档

脚本开发相关工具

触动精灵 iOS

脚本编辑器:TouchSprite Studio

抓色器:TSColorPicker

已兼容的模拟器

点击触摸

函数:touchDown、touchUp、touchMove 触摸点击、滑动

函数:catchTouchPoint 获取用户点击坐标

图色类及屏幕相关

函数:init 初始化

函数:getDeviceOrient 获取手机、应用屏幕方向(仅支持 iOS)

函数:setDeviceOrient 设置屏幕方向(仅支持 iOS)

函数:getScreenSize 获取屏幕分辨率

函数:setScreenScale 坐标缩放

函数:keepScreen 保持屏幕

函数:getColor、getColorRGB 获取屏幕某点颜色值

函数:findColorInRegionFuzzy 区域模糊找色

函数:findImageInRegionFuzzy 区域模糊找图

函数:findMultiColorInRegionFuzzy 区域多点找色

函数:findMultiColorInRegionFuzzyExt 高级区域多点找色

函数:findImage 高级区域找图(仅支持 iOS)

函数:snapshot 截图

函数:imageOperMerge 图片合并(仅支持 iOS)

开发辅助类

函数:initLog、wLog、closeLog 日志函数

函数:sysLog 系统日志

函数:nLog 远程日志

脚本控制

函数:mSleep 延时

函数:lua_exit 退出脚本

函数:lua_restart 重载脚本

函数:luaExitIfCall 来电暂停

函数:checkScriptAuth 脚本授权

系统相关

函数:dialog 提示框

函数:toast 提示

函数:dialogRet 带按钮的对话框

函数:dialogInput 参数对话框(仅支持 iOS)

函数:getNetTime 获取网络时间

函数:addContactToAB 添加联系人

函数:removeAllContactsFromAB 清空通讯录

UTF-8 编码

模块说明

函数:utf8.char 整数序列转换字符串

函数:utf8.codes 获取字符编码

函数:utf8.codepoint 获取指定位置字符编码

函数:utf8.len 统计字符个数

函数:utf8.offset 获取字符位置

文字输入及按键模拟

函数:inputText 输入字符串

函数:switchTSInputMethod 切换到触动/帮你玩输入法(仅支持 Android)

函数:getInPutMethod 获取当前输入法包名(仅支持 Android)

函数:pressHomeKey 模拟主屏幕按键

函数:doublePressHomeKey 双击 HOME 键(仅支持 iOS)

函数:keyDown、keyUp 模拟键盘(仅支持 iOS)

应用相关

函数:runApp、closeApp 运行、关闭应用

函数:isFrontApp 判断前台应用

函数:frontAppBid 获取前台应用

函数:appBundlePath 获取应用安装路径

函数:appDataPath 获取应用数据路径(仅支持 iOS)

函数:appIsRunning 检测应用是否运行

函数:openURL 打开网络地址

函数:ipaInstall、ipaUninstall 安装、卸载应用(仅支持 iOS)

函数:install, uninstallApp 安装、卸载应用程序(仅支持 Android)

函数:getInstalledApps 获取应用列表

函数:isInstalledApk 查询应用程序是否安装(仅支持 Android)

函数:changeSpeed 变速器(仅支持 iOS)

函数:cleanApp 清理应用数据(仅支持 Android)

系统信息类

函数:getDeviceType 获取设备类型

函数:getDeviceID 获取触动精灵设备号

函数:getMemoryInfo 获取设备内存信息

函数:getTSVer、getOSVer 获取引擎版本号、获取系统版本号

函数:getOSType 获取设备系统

函数:batteryStatus 检测电池状态、电量

函数:getProcess 获取设备进程列表

函数:getDeviceAlias 获取设备别名(仅支持 iOS 企业版)

函数:getDeviceName 获取设备名称

函数:setDeviceName 设置设备名称(仅支持 iOS)

函数:getIMEI 获取设备 IMEI(仅支持 Android)

函数:getNetworkIP 获取网络 IP(仅支持 Android)

函数:getDeviceBrand 获取设备品牌(仅支持 Android)

函数:getDeviceModel 获取设备型号(仅支持 Android)

函数:getCPUType 获取 CPU 型号(仅支持 Android)

函数:getUUID 获取 UUID(仅支持 Android)

函数:getSDCardPath 获取 SD 卡路径(仅支持 Android)

函数:getDPI 获取屏幕 DPI 和像素密度(仅支持 Android)

系统控制

函数:setRotationLockEnable 锁定设备方向(仅支持 iOS)

函数:setWifiEnable 无线开关

函数:setBTEnable 蓝牙开关

函数:setAirplaneMode 飞行模式开关

函数:getStatus 获取状态

函数:setEnable 开关(仅支持 iOS)

函数:setCellularDataEnable 蜂窝网络开关(仅支持 iOS)

函数:setAssistiveTouchEnable 小圆点开关(仅支持 iOS)

函数:setReduceMotionEnable 减弱动效开关(仅支持 iOS)

函数:getBacklightLevel 获取屏幕亮度触动精灵复制文本里指定的一段文字

函数:setBacklightLevel 设置屏幕亮度

函数:setVolumeLevel 设置设备音量

函数:vibrator 手机振动

函数:playAudiostopAudio 播放音频、停止播放

函数:lockDevice 锁定设备

函数:deviceIsLock 设备锁定状态

函数:unlockDevice 解锁设备

函数:setAutoLockTime 设置锁屏时间

函数:resetIDLETimer 重置锁屏计时(仅支持 iOS)

函数:shakeDevice 摇一摇(仅支持 iOS)

函数:setScreenResolution 修改分辨率(仅支持 iOS)

函数:clearKeyChain 清除钥匙串(仅支持 iOS)

函数:fakeGPS 伪装位置(仅支持 iOS)

函数:saveImageToAlbum 图片存入相册

函数:saveVideoToAlbum 视频存入相册(仅支持 iOS)

函数:writePasteboard、readPasteboard 读写剪贴板

回调函数

函数:beforeUserExit 终止之前运行

文字识别

函数:ocrText 本地光学字符识别

函数:addTSOcrDict、addTSOcrDictEx、tsOcrText、tsFindText 触动点阵识别

函数:addDmOcrDict、dmOcrText、dmFindText 打码点阵识别

触动相关

函数:deviceIsAuth 获取触动精灵授权状态(仅支持 iOS)

函数:getRunningAccess 获取当前脚本运行权限(仅支持 Android)

函数:userPath 获取客户端文件路径

函数:whoAmI 检测触动产品类型

函数:showFloatButton 显示、隐藏悬浮条

Thread 协程(仅支持 iOS)

函数:thread.create 创建协程

函数:thread.createSubThread 创建子协程

函数:thread.stop 停止协程队列

函数:thread.wait 阻塞等待当前协程完成

函数:thread.setTimeout 设置协程超时时间

函数:thread.clearTimeout 清除协程超时时间

函数:thread.waitAllThreadExit 协程阻塞等待

浮动窗口

函数:fwShowWnd 显示浮动窗口

函数:fwShowTextView 显示文字视图

函数:fwShowImageView 显示图形视图

函数:fwCloseView 关闭视图

函数:fwCloseWnd 关闭窗口

函数:fwGetWndPos 获取窗口位置

函数:fwShowButton 显示一个按钮

函数:fwGetPressedButton 获取按钮点击事件

完整实例

showUI 脚本 UI

什么是 json

调用示例

用 json 创建界面

全局属性

style 界面样式

width、height 界面的宽和高

bg 指定界面的背景图片

okname、cancelname 指定底部按钮显示文字

title 界面标题

pagetype 开启多页显示模式

orient 指定 UI 界面显示方向

btnbkcolor 设置底部按钮背景色

pagenumtype 设置分页指示样式

bgcolor 设置界面背景色

config 指定UI配置保存文件名

timer 指定UI界面自动确认时间

rettype 指定返回值类型

selpage 多页模式下指定默认停留的页面

通用属性

width 控件宽度

nowrap 指定下一个控件是否换行

界面控件

标签 Label

单选框 RadioGroup

编辑框 Edit

多选框 CheckBoxGroup

下拉框 ComboBox

图片 Image

默认样式

指定控件尺寸与位置

返回值

自定义样式实例代码

webUI(仅支持 iOS)

webview.new 创建 webview

myweb1.show 显示webview

myweb1.set 改变 webview 外观

myweb1.close 关闭 webview

event.register 发送消息,传递参数

完整例子

触动精灵模拟物理按键(仅支持 Android)

为触动增加无限可能,Lua扩展库

触动精灵 TSLib 函数扩展库

函数扩展库下载

点击滑动类

颜色判断类

开发调试类

文件操作类

应用信息类

数据操作类

系统判断类

clear 清理类模块

showUI 脚本配置界面

便捷UI

触动精灵云打码扩展库

触动精灵云打码

使用方法

函数:ocr.cloudOcrText、ocr.cloudOcrReportError、ocr.version

简易 SMTP 邮件发送库

函数:mail.send

触动精灵中 "os.execute" 应用

respring 注销

poweroff 关机

reboot 重启

clearCache 清空缓存

delFile 删除文件

unzip 解压

movefile 移动文件

copyfile 复制文件

newfolder 创建文件夹

触动精灵中"io库"应用

readFile 将指定文件中的内容按行读取

getList 遍历文件

findFile 查找文件

file_exists 检测指定文件是否存在

在触动精灵中使用"LuaSocket"网络库

如何安装

httpGet请求

httpPost请求

挂载代理

以 socket 的方式访问

smtp方法发送 mail

实现获取网络时间

统计毫秒精度的时间

生成随机数

触动精灵ts.so扩展库

触动精灵苏泽扩展库

JSON 模块

FTP 模块

设备信息模块

字符串处理模块(仅支持 iOS)

HTTP 模块

PLIST 文件操作(仅支持 iOS)

POS 模块

附录

iOS 设备分辨率一览表

Lua math 库

已知与触动精灵/帮你玩/小精灵/企业版 iOS 冲突的插件列表

约定的按键编码

电话功能按键

控制类按键

基本类按键

安卓手机如何开启系统悬浮窗权限

laravel 怎么检测队列是否执行

队列Service

laravel把队列相关的服务全封装在一个Service里面,通过Queue Service Provider 注册到IOC中.在Queue Serivce里提供了多种服务,关于它做了什么请看以下代码中的注释(代码有点多,就不全部贴出来了)

public function register()

{

// 注册Manager, 而Manager为队列服务的统一入口

$this-registerManager();

// 注册队列的各种命令

$this-registerWorker();

$this-registerListener();

// 注册任务执行失败后的记录

$this-registerFailedJobServices();

// 未知

$this-registerQueueClosure();

}

讲配置文件

在Queue Service注入到IOC后,我们就可以使用队列了。

一个队列服务最基本的就是把任务写入队列,再将其拿出来执行, 很简单.所以队列服务最基本的要素有四点:任务,进队列,出队列,执行.在这里,我们就跟着这四个要素的步伐,看看它们在laravel中是如何实现的.这里,先以官方的示例来分析,有了一个具体概念之后再举一反三,学会它的本质。

任务

队列服务就是围绕着任务进行的.在手册上,通过它的实例SendReminderEmail,我们可以很清楚地知道,laravel可以对一个任务做很多事,比如:可设置重新执行的次数,说明该任务(若失败)可以被执多次(针对的是单个Job);可设置是否可以延迟执行;对该Job设置处理的队列名称,等等.这些功能都是\Illuminate\Bus\Queueable提供的,当然,实例中还有一个\Illuminate\Queue\InteractsWithQueue,而它则是针对Job所用(稍后再说).一个任务建立完成后,就需要使其进入队列了。当然了,除了以上几个特点,还有任务的执行逻辑等等,要全面地了解任务,就需要清楚它的数据结构,其在队列中的数据结构会在进入队列中讲到.

任务进队列

示例中,在定义了任务之后,就将其用Controller中的方法使其进入了队列,那么这一点是如何实现的?

代码在:\Illuminate\Foundation\Bus\DispatchesJobs

protected function dispatch($job)

{

return app(Dispatcher::class)-dispatch($job);

}

/**

* Dispatch a command to its appropriate handler in the current process.

*

* @param mixed $job

* @return mixed

*/

public function dispatchNow($job)

{

return app(Dispatcher::class)-dispatchNow($job);

}

这段代码的意图得了解app(Dispather::class), 这个则在\Illuminate\Bus\BusServiceProvider中表现的很明确了(为什么是这里就不分析了),app(Dispather::class)就是\Illuminate\Bus\Dispatcher.现在,上面代码中的dispatch与 dispatchNow方法就会逐渐清晰起来.简言之,该Dispatcher类做了两件事,执行该任务或把该任务放入队列,也就是将队列任务分为了两种执行方式,立即执行或以消息队列执行,与队列相关的代码如下:

/**

* 把任务分发到队列中

* @param string $command 任务类

*/

public function dispatchToQueue($command)

{

$connection = isset($command-connection) ? $command-connection : null;

// laravel里内置了多种队列服务,这里则解析出来

$queue = call_user_func($this-queueResolver, $connection);

// 队列服务解析不成功则抛出异常

if (! $queue instanceof Queue) {

throw new RuntimeException('Queue resolver did not return a Queue implementation.');

}

// 在任务类中可自定义queue方法进入队列

if (method_exists($command, 'queue')) {

return $command-queue($queue, $command);

} else {

// 系统提供的一种进入队列方式

return $this-pushCommandToQueue($queue, $command);

}

}

/**

* 根据不同的任务属性选择不同的进入队列方式

* 这里所提到的方式在手册中有提到

* @param Queue $queue 队列服务

* @param $command 任务类

*/

protected function pushCommandToQueue($queue, $command)

{

// 该推任务设置了延迟,且设置队列名称

if (isset($command-queue, $command-delay)) {

return $queue-laterOn($command-queue, $command-delay, $command);

}

//设置队列名称

if (isset($command-queue)) {

return $queue-pushOn($command-queue, $command);

}

//设置延迟

if (isset($command-delay)) {

return $queue-later($command-delay, $command);

}

// default

return $queue-push($command);

}

到现在为止,Controller已经展示了一种进入队列的方法,很明显它是经过封装提供的接口,虽然很好用,但有些操作是我们所不必须的,比如:是否立即执行,进入队列就需设置不同的任务参数等等,需要更好的为我们所用,就再深入一点,找出它进入队列的关键点(与Redis交互的地方).上面已经提到call_user_func($this-queueResolver, $connection);会得到一个队列服务,那么$this-queueResolver是什么?在\Illuminate\Bus\BusServiceProvider:23就可以看到:

// 理解这个回调,则需要了解Illuminate\Contracts\Queue\Factory

// 在vendor/laravel/framework/src/Illuminate/Foundation/Application.php:1051 可以看到它与Illuminate\Queue\QueueManager的关系了

$this-app-singleton('Illuminate\Bus\Dispatcher', function ($app) {

return new Dispatcher($app, function ($connection = null) use ($app) {

return $app['Illuminate\Contracts\Queue\Factory']-connection($connection);

});

});

QueueManager

在laravel中,Service对外的统一接口都是其Manager,其中与所需服务交互的基本上是通过__call 方法提供,这种方式有两个优点,一,提供统一的接口,二,分层明确(将实际的处理由__call转发,与配置相关的则由manager自己解决).

现在为了使任务进入队列的过程更清晰,一步一步找到了QueueManager,这个类设置了很多事件接口,和其他连接相关方法.其中connection方法就展示了一个队列服务是如何解析出来的了.

其实这段解析的代码唯一的难点中于:

protected function getConnector($driver)

{

if (isset($this-connectors[$driver])) {

return call_user_func($this-connectors[$driver]);

}

throw new InvalidArgumentException("No connector for [$driver]");

}

为什么这么一段简单的代码就能解析队列服务?查看QueueServiceProvider就一目了然了.其中就注册了很多队列服务.redis的队列服务处理则是\Illuminate\Queue\RedisQueue.

QueueManager的功能现在很清晰了.1,解析队列服务 2,转发(__call)处理到相应的队列服务中 3,提供队列相关接口 .既然QueueManager有这么多队列相关的功能,那么我们完全可以把它作为一个队列处理的入口(直接获取队列服务再进行操作是并不是明智的选择),巧的是laravel也是这么做的.所以现在有两种方式进入队列,1,使用\Illuminate\Foundation\Bus\DispatchesJobs间接与队列服务通信 2,使用QueueManager间接与队列服务通信.当然这些方法都是在\Illuminate\Queue\RedisQueue(队列服务的接口)上扩展的.所以掌握该类,就能明白队列的各种行为了.

RedisQueue

队列服务在lavavel中提供了多种,这里只对以Redis队列服务进行分析学习.所以有关队列的处理都集中在\Illuminate\Queue\RedisQueue.上面也说到了,有两种方式进入队列, 分别使用,看它们产生的任务数据结构有什么区别?(数据结构便于分析,在后面会提到)

在Controller使用 $this-dispatch((new SendReminderEmail()));即以任务类进入

{

"job": "Illuminate\\Queue\\CallQueuedHandler@call",

"data": {

"command": "O:26:\"App\\Jobs\\SendReminderEmail\":4:{s:5:\"queue\";s:5:\"email\";s:10:\"connection\";N;s:5:\"delay \";N;s:6:\"\u0000*\u0000job\";N;}"

},

"id": "7u00jImd8CAns0fQO8jedqkQmnbQsfsr",

"attempts": 1

}

直接使用 Queue::push(SendReminderEmail::class , ['email'='123456789@qq.com'],'email');

{

"job": "App\\Jobs\\SendReminderEmail",

"data": {

"email": "123456789@qq.com"

},

"id": "I0OeBIQjJjisQrZ7STX3zexrBLF7Uilx",

"attempts": 1

}

上面讲到,构成消息队列需要两个进程,所以上面的进入队列是一个进程,现在的出队列及执行任务则在另一个进程中执行。lavarel提供了两个命令来启动该进程,quque:work ,queue:litsen 当然,再理解了如何完成这些操作后完全可以自己写一个命令,现在看看它是如何出队列和如何执行任务?

任务出队列

在手册中,对于一个任务可以指定多种属性,比如,延迟,失败次数,队列名称等等,当然,所有可执行操作或功能都得依赖数据结构,数据结构的制定也是为了实现相应的行为.所以,RedisQueue的代码对应上面的数据结构来理解就比较容易了。

RedisQueue是所有队列服务(Redis)的基础接口,所以任务出队列的操作也能在这找到。假设现在已经对RedisQueue的代码已经有点熟悉了,不难发现,有一个稍复杂的pop方法(出队列)。那么,问题出现了,出队列是如何实现的?解决了这个问题,任务出队列就可算是完成了.

队列应有的功能

查看php artisan queue:work --help命令的使用方法,整理有关队列所需的功能或服务:

指定队列名称

任务的执行逻辑

任务执行延迟

任务中失败的最大次数

当然还有其他关于该命令的功能,比如:是否以守护进程执行,是否强制执行,限制进程执行的memory,无任务时的等待时间.这些与命令相关的因不同的命令而异,与队列任务无关.这样,在理清队列任务需要的功能后,我们就可以分析它的数据结构,理解代码了.

队列数据结构

数据结构都是依据行为而建立.所以在查看pop方法时,可考虑以上几个点.上面的数据结构中,已经可以看到队列的执行逻辑,所需参数,失败次数,这些一目了然,就不啰嗦了.在整个pop方法中,有这么几个队列,queue:delayed,queue:reserved,queue.本来取出一个任务用lpop就可完成,为什么要多用两个集合(注意,是有序集合不是队列)来完成pop操作呢?因为要实现任务延迟和失败处理.

其执行过程如图:

过程解析:

(1). 取任务,因为要实现延迟的功能,所以在有序集合里的score是过期时间,过期时间的含义则是在此时间之前不执行,也就达到了延迟执行的效果.延迟的含义在这里指的并不是在多少秒后执行,而是在多少秒内不执行.对于过期的任务,就将其rpush到队列中,直到lpop操作将其拿走.

(1).为什么在存在queue:reserved集合并且把lpop的任务zadd进支?因为只要lpop了job就可以将其记录下来,若此时任务还未开始执行进程就非正常终止了,该任务就不会丢失,再次执行时,依据上面的步骤就可以将其取出,防止意外使job丢失.

(2).队列的执行都是依据json中的类来完成,这部分较简单,略.

(3).当任务执行成功时,要手动删除queue:reserved中的任务;当任务执行失败,删除queue:reserved中的任务,再将其记录下来,记录方式是zadd queue:delayed, 并且将该任务的执行次数加一,这个过程RedisQueue已经封装(RedisQueue::release)好了.

这一系列的过程就完成了让队列任务延迟的功能.所以这么复杂的操作都是为了实现延迟的功能,当然,有更好的点子可以考虑自己实现.

执行任务

到此,任务的执行在json数据结构中表现的很明确,整个处理过程也很清晰了.需要注意的是当任务执行成功后要删除任务.对于如何执行出队列,以及如何执行队列任务,可以详细看看queue:work命令(\Illuminate\Queue\Console\WorkCommand::fire), 它是最好的示例;

队列处理命令的自定义

在使用queue:work之后,会发现它并不有处理所有的情况.所以在本文中一直提到过,自写一个处理命令是可行的.当面临queue:work所不能解决的问题时,可以好好考虑下自己编写.在实际开发中,任务的种类繁多,对于不同的任务应该有不同的处理方案.所以,有以下几个问题是经常遇到的:

比如:

调用服务发生错误且由服务提供方造成,需另作记录,而这样的错误不算作job的执行错误

营销短信只能在9:00到20:00之间发送, 所以在该时间段内没有执行的必要

与数据库交互时,数据库连接是有时间限制的,而以守护进程的方式执行则无时间限制,这样就会报错

所以,面临laravel所提供命令的局限性,有自定义处理命令的能力是很有必要的.

JAVA 如何一次下载多个文件

创建多线程下载

如果说方便下载,是打包再下载

~~~~~~~~~~~~~~~~~~~~~~

method_exists的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、method_exists的信息别忘了在万域城进行查找喔。

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~