phpMyAdmin使用方便,已成为大多数站长的常用工具,对于小型网站来讲phpmyadmin已经绰绰有余了,但是对于中大型网站,在数据库较为庞大的时候,phpmyadmin就显得力不从心了!
当使用 phpMyAdmin 导入的数据库大小大于 2M 的时候,会出现如下提示:
No data was received to import. Either no file name was submitted, or the file size exceeded the maximum size permitted by your PHP configuration. See FAQ 1.16.
一般情况下,phpMyAdmin最大限制上传2M以内的文件,但是当网站运营一段时间后,即使把sql格式的数据库压缩成zip格式,想变成2M以内是不太现实的。
个人并不推荐使用phpMyAdmin来导入大数据库,因为大多数用户使用的是虚拟主机,很多文件没有服务器权限是无法修改的,而且phpmyadmin对大数据库的执行效率也非常低,容易出现错误。
导入大数据库的解决方案
推荐使用 BigDump工具 来进行导入大数据库的操作,下载地址和使用方法见:用BigDump工具导入超大MySQL数据库备份文件
如果你很执着一定要用phpmyadmin来进行数据库导入操作,网络上虽然可以找到很多资料,但大多数都不全,只解决了一部分问题,所以我整理出了相对比较靠谱的方案,
以下是我搜集的一些解决phpMyAdmin上传文件大小限制的方法
方案一(简单)
打开phpmyadmin下的配置文件 config.inc.php
代码如下 | 复制代码 |
查找 $cfg['UploadDir'] = ”; $cfg['SaveDir'] = ”; 给他们赋值 $cfg['UploadDir'] = ‘upload’; $cfg['SaveDir'] = ‘save’; |
修改后如果提示“配置文件现在需要绝密的短语密码(blowfish_secret)。”不用担心,
然后在 phpMyAdmin 的目录下创建两个空目录,upload 和 save,并且把要导入的数据库文件(必须是sql格式,非zip格式)传送到 upload 目录下。
登录phpMyAdmin,点导入(import) 发现多了一个 网站服务器上传文件夹
选择网站服务器上传的文件夹里的数据库就可以了,然后点击【执行】按钮就可以顺利导入超大型的数据库了。
方案二(繁琐)
打开PHP配置文件 php.ini
查找 upload_max_filesize 和 post_max_size 把他们的值修改的大一点
如果上传的文件很大,还需进行以下修改
代码如下 | 复制代码 |
max_execution_time(php页面执行最大时间) max_input_time(php页面接受数据最大时间) memory_limit(php页面占用的最大内存) |
这是因为phpmyadmin上传大文件时,php页面的执行时间、内存占用也势必变得更长更大,其需要php运行环境的配合,光修改上传文件大小限制是不够的。
打开 phpmyadmin 目录下的 config.inc.php 文件
查找 $cfg[‘ExecTimeLimit’]配置选项,默认值是300,需要修改为0,即没有时间限制。
打开 phpmyadmin 目录下的 import.php 文件 修改 $memory_limit 的值
说明:首选读取php.ini配置文件中的内存配置选项memory_limit,如果为空则默认内存大小限制为2M,如果没有限制则内存大小限制为10M,你可以结合你php.ini配置文件中的相关信息修改这段代码。
下面来看一篇关于phpMyAdmin错误信息配置文件现在需要绝密的短语密码(blowfish_secret)问题的解决办法吧,希望例子能帮助到各位。因为一些特殊原因,我需要对phpmyadmin的配置文件进行修改,但是修改后就出现问题了,一打开phpmyadmin,就出现“配置文件现在需要绝密的短语密码(blowfish_secret)。”
那就按照他的提示来吧,在配置文件里设置一个密码就是了。
打开phpmyadmin的配置文件 phpmyadmin/config.inc.php(注:php5.0为config.sample.inc.php)
查找 $cfg['blowfish_secret'] 把他的值修改下,任意数字字母都可以,也就是错误信息中提到的设置短语密码。
vi phpmyadmin/config.inc.php
代码如下 | 复制代码 |
<?php |
修改以后,以后登入phpmyadmin就方便多了,但一定不要使用空密码,切记!
如果你php使用字符编码转换函数 mb_convert_encoding碰到 Call to undefined function mb_convert_encoding()问题,可参考本文章来解决。在运行程序时发生“Fatal error: Call to undefined function
mb_convert_encoding()”致命错误,这个问题很好解决:
在php.ini中打开extension=php_mbstring扩展即可。
最后重启apache即可
测试
如:
$content = iconv("UTF-8", "gb2312//IGNORE″, $content);
如果你是碰到无法上传文件那么可能是目录权限地设置问题,但能上小文件无法上传大文件,这个就是php.ini或环境的配置问题,下文来给各位整理此类问题的解决办法。php.ini无法上传大文件完美解决办法
1、打开php.ini(打开方式就不用说了,百度一大堆)
2、查找post_max_size
表单提交最大数值,此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的
默认为8M,设置为自己需要的值,此参数建议要设置比upload_max_filesize大一些
3、查找File Uploads
是否允许通过http上传文件的开关,确认file_uploads = on
4、查找upload_tmp_dir
文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹
如果系统报错提示有“XXX临时目录XXX”的话,这个目录就需要你来设置一个有效目录,没报错就不用管
5、查找upload_max_filesize
允许上传文件大小的最大值,默认为2M,设置为自己需要的值此参数建议不要超过post_max_size值,因为它受控于post_max_size值(就算upload_max_filesize设置了1G,而post_max_size只设置了2M时,大于2M的文件照样传不上去,因为它受控于post_max_size值)
6、如果要上传大于8M的文件,还需要对下面的参数也进行设置:
查找max_execution_time = 600 ;每个PHP页面运行的最大时间值(秒),默认30秒
max_input_time = 600 ;每个PHP页面接收数据所需的最大时间,默认60秒
memory_limit = 8M ;每个PHP页面所需要的最大内存,默认8M
nginx法上传大文件完美解决办法
1.client_body_buffer_size 尽量设置的大点,这是基于速度的考虑,如果因为设置的过小,导致上传的文件老要写磁盘,那速度就太慢了。
2.client_body_temp_path 路径要有可写权限,这个是明显的错误了。改正了就好
3.client_max_body_size 设置上传文件的最大值,这个是基于安全的考虑,我们认为正常用户不会或者基本不会上传太大的文件。
可以设置为client_max_body_size 100m; 或者按照自己的业务来设置这个值。
例子
nginx的配置。
代码如下 | 复制代码 |
cd /export/servers/nginx/conf/nginx.conf,在这个配置文件里面的server段里面的 location / { root html; index index.html index.htm; client_max_body_size 1000m; } |
加上了client_max_body_size 字段,怎么重启都不行。后来在总配置文件里面发现了分配置文件:
代码如下 | 复制代码 |
sendfileon; |
于是找到了分配置文件,在分配置文件里面进行修改。分配置文件配置如下:
代码如下 | 复制代码 |
server { listen 80; server_name chat.erp.360buy.com; # access_log /export/servers/nginx/logs/chat.erp.360buy.com; location / { proxy_pass http://tomcat; client_max_body_size 1000m; } } |
用/export/servers/nginx/sbin/nginx -s reload重启下,上传文件的大小受限的问题就解决了。
分享下我的解决过程,希望对大家有帮助。
如果还是无法解决我们需要看看是不是php表单设置问题
这段代码分为两个文件,一个为upload.html,一个是upload.php
upload.html
代码如下 | 复制代码 |
<form enctype="multipart/form-data" action="upload.php" method="post"> <input type="hidden" name="max_file_size" value="100000"> <input name="userfile" type="file"> <input type="submit" value="上传文件"> </form> |
其中,
请注意<form enctype="multipart/form-data"……>这是一个标签,我们要实现文件的上传,必须指定为multipart/form-data,否则服务器将不知道要干什么。
值得注意的是文件upload.html中表单选项 MAX_FILE_SIZE 的隐藏值域,通过设置其Value(值)可以限制上载文件的大小。
MAX_FILE_SIZE 的值只是对浏览器的一个建议,实际上它可以被简单的绕过。因此不要把对浏览器的限制寄希望于该值。实际上,PHP 设置中的上传文件最大值,是不会失效的。但是最好还是在表单中加上 MAX_FILE_SIZE,因为它可以避免用户在花时间等待上传大文件之后才发现该文件太大了的麻烦。
upload.php
代码如下 | 复制代码 |
$f=&$HTTP_POST_FILES['Myfile']; $dest_dir=’uploads’;//设定上传目录 $dest=$dest_dir.’/’.date("ymd")."_".$f['name'];//设置文件名为日期加上文件名避免重复 $r=move_uploaded_file($f['tmp_name'],$dest); chmod($dest, 0755);//设定上传的文件的属性 或者 <?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?> |
以上范例中 $_FILES 数组的内容如下所示。我们假设文件上传字段的名称为 userfile(名称可随意命名)
在使用composer update时遇到的,详细的错误消息Composer PHP Fatal error:Allowed memory size of 536870912 bytes exhausted了,下面来一起看问题解决办法
今天在运行composer update时遇到的,详细的错误消息如下:
$ composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
PHP Fatal error: Allowed memory size of 536870912 bytes exhausted
(tried to allocate 32 bytes) in phar:///usr/local/Cellar/composer/
1.0.0-alpha8/libexec/composer.phar/src/Composer/DependencyResolver/
Rule.php on line 62
Fatal error: Allowed memory size of 536870912 bytes exhausted
(tried to allocate 32 bytes) in phar:///usr/local/Cellar/composer/
1.0.0-alpha8/libexec/composer.phar/src/Composer/DependencyResolver/
Rule.php on line 62
一直以为是网络原因,最近连接国外的网络不是很稳定,后来根据报错的信息Allowed memory size of 536870912 bytes exhausted提示知道可能是内存分配不够,大家知道在PHP的配置文件php.ini中有限制脚本运行内存的设置memory_limit把这个值调大一些就可以解决这个问题了。
memory_limit = 1G
当然大家也许不喜欢随随便便的改动配置文件php.ini,在帖子《Composer update runs out of memory #1898》Dynom给出了个临时的解决办法:
php -dmemory_limit=1G composer.phar update