MYSQL中的UDF - Can't open shared library 的研究[网络技术]
本文“MYSQL中的UDF - Can't open shared library 的研究[网络技术]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
Ninty 's blog
mysql中支持UDF扩大 ,使得我们可以调用DLL里面的函数来实现一些特别的功效.
但是关于UDF的具体限制,MYSQL的各个版本各有差别. 下面记录一下:
据说(只是据说,没做测试),在MYSQL 4.1从前的版本中,可以将全部的DLL文件里面的任何函数都注册到MYSQL里面以供MYSQL调用.
无论这个DLL在什么位置,函数的声明是什么样的.
在MYSQL 4.1及今后的版本中,对UDF函数举行了限制,只有实现了一个特定接口的函数才可以被成功注册到MYSQL中,
这样就避免了通过MYSQL不法调用系统的DLL.
在MYSQL5今后,对注册的DLL的位置有了限制,成立函数的时刻,所对应的DLL不能包含/大概\,简单的理解就是不能是绝对途径.
所以我们将DLL释放到system32目录,来跳过这个限制..大概放到盘符的根目录下通过c:udf.dll这种情势的写法来跳过限制.
经过28ice大牛的提醒,发现本来只要把dll放到PATH这个环境变量所表示的任何一个目录下面,效果跟放到system32目录下面一样.
也可以利用.
再说MYSQL5.1,这里有个问题相信大家会常常碰到的..
大家有的时刻在成立函数的时刻,常常会碰到
这个错误.但是我们的语句没有写错,DLL也是免杀的大概服务器上根本没装杀软..
好多人这里就不懂得了..
这是因为MYSQL 5.1及今后的版本中,又多了一个限制.
成立函数时所用的DLL只能放在mysql的plugin目录里面..
并且这个plugin目录默许是不存在的..挺YD吧,,大概就是为了避免通过into dumpfile将DLL来写到这个文件夹..
MYSQL是无法成立目录的哦, 假如into dumpfile的目标目录不存在是会报错的.
需求手动成立 ,但是它倒是一个系统变量.
我在虚拟机上装了MYSQL 5.1.3举行了测试,安装目录是:
通过:
view source
print?1 show variables like '%plugin%';
可以看到:
+---------------+------------------------------------------------------------------------
| Variable_name | Value
+---------------+-------------------------------------------------------------------------
| plugin_dir | C:\Program Files\MySQL\MySQL Server 5.1\lib/plugin
+---------------+-------------------------------------------------------------------------
plugin目录位置是mysql安装目录下的lib/plugin ,需求我们手动成立 .
然后将udf.dll传到这个位置,再成立函数 ,这时就会成功了.
但是这个变量的值是只读的,尝试用
view source
print?1 set @@plugin_dir = 'd:\\';
去更改它的值会发生错误.
只能通过改正php.ini ,在里面增添一个
才可以改正这个值 ..
无奈..
所以在导出UDF提权之前 ,先肯定一下MYSQL的版本是有必要的.
假如是5.1今后的,那就不行了,假如是5.1从前的版本成立函数的时刻还报Can't open shared library这个错误.
那就要看看DLL是不是真的被导出了,还是被杀软断绝大概干掉了.
以上是“MYSQL中的UDF - Can't open shared library 的研究[网络技术]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |