Monthly Archives: 十月 2016

十月 31st, 2016

wKioL1gRbvqjrVtcAAA4eVx2Dz8396.jpg

MySQL ERROR 1878报错解决办法

错误重现

Part1:大表修改字段

mysql> ALTER TABLE `erp`

    -> ADD COLUMN `eas_status`  tinyint(3) unsigned  NOT NULL DEFAULT 0 ‘ AFTER `totalprice`;

ERROR 1878 (HY000): Temporary file write failure.

mysql> \q

这里可以看到,添加字段的时候爆出了1878错误。

Part2:排错过程

先看数据库的error日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2016-10-27 10:19:22 7f5dca1bf700 InnoDB: Error: Write to file (merge) failed at offset 258998272.
InnoDB: 1048576 bytes should have been written, only 651264 were written.
InnoDB: Operating system error number 0.
InnoDB: Check that your OS and file system support files of this size.
InnoDB: Check also that the disk is not full or a disk quota exceeded.
InnoDB: Error number 0 means 'Success'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html
2016-10-27 10:35:34 7f5dcb42f700 InnoDB: Error: Write to file (merge) failed at offset 88080384.
InnoDB: 1048576 bytes should have been written, only 782336 were written.
InnoDB: Operating system error number 0.
InnoDB: Check that your OS and file system support files of this size.
InnoDB: Check also that the disk is not full or a disk quota exceeded.
InnoDB: Error number 0 means 'Success'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html
2016-10-27 10:37:02 7f5dd0076700 InnoDB: Error: Write to file (merge) failed at offset 88080384.
InnoDB: 1048576 bytes should have been written, only 770048 were written.
InnoDB: Operating system error number 0.
InnoDB: Check that your OS and file system support files of this size.
InnoDB: Check also that the disk is not full or a disk quota exceeded.
InnoDB: Error number 0 means 'Success'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html

查看错误日志可以看到磁盘空间不足

Part3:验证

[root@dev1 helei]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root

                       45G   43G  160M 100% /

tmpfs                 7.9G  1.2M  7.9G   1% /dev/shm

/dev/sda1             477M   90M  358M  21% /boot

可以看到磁盘空间不够了,需要释放磁盘空间,

 

——总结——

原因是mysql的tmpdir分区的剩余空间大小没有erp大。 mysqlalter table时需要的临时空间要比该表才行。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。

TAGS: ,
十月 31st, 2016

当用bash启动一个程序,你可以用在程序后加&,实现程序在后台运行;

例如: emacs &

但如果你忘了输入&;但你又不想把程序停止后重新启动;

你可以这么做:

按Ctrl + Z暂停前台工作,比如前面提到的Emacs;

然后用jobs命令查看当前bash一共启动了多少程序,你可以看到你的emacs在其中,它的状态是Stoped的; 并且它的jobID也可以看,比如是2

然后用命令bg 2

这样你就可以达到和emacs &一样的效果了。

当你有些工作比如updatedb, find等需要一定时间,这些工作可以考虑让它在后台运行,而你可以用bash做其它工作。

 

A

Shell支持作用控制,有以下命令:
1. command& 让进程在后台运行
2. jobs 查看后台运行的进程
3. fg %n 让后台运行的进程n到前台来
4. bg %n 让进程n到后台去;
PS:”n”为jobs查看到的进程编号.

B

fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然现在基本上不怎么需要用到这些命令,但学会了也是很实用的
一。& 最经常被用到
这个用在一个命令的最后,可以把这个命令放到后台执行
二。ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停
三。jobs
查看当前有多少在后台运行的命令
四。fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五。bg
将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

 

C

Linux下使用Shell命令控制任务Jobs执行

下列命令可以用来操纵进程任务:
ps 列出系统中正在运行的进程;
kill 发送信号给一个或多个进程(经常用来杀死一个进程);
jobs 列出当前shell环境中已启动的任务状态,若未指定jobsid,则显示所有活动的任务状态信息;如果报告了一个任务的终止(即任务的状态被标记为Terminated),shell 从当前的shell环境已知的列表中删除任务的进程标识;
bg 将进程搬到后台运行(Background);
fg 将进程搬到前台运行(Foreground);

D

将job转移到后台运行
如果你经常在X图形下工作,你可能有这样的经历:通过终端命令运行一个GUI程序,GUI界面出来了,但是你的终端还停留在原地,你不能在shell中继续执行其他命令了,除非将GUI程序关掉。

为了使程序执行后终端还能继续接受命令,你可以将进程移到后台运行,使用如下命令运行程序:

#假设要运行xmms

$xmms &

这样打开xmms后,终端的提示又回来了。现在xmms在后台运行着呢;但万一你运行程序时忘记使用“&”了,又不想重新执行;你可以先使用ctrl+z挂起程序,然后敲入bg命令,这样程序就在后台继续运行了。

E

概念:当前任务

如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]”的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务。

F

察看jobs
使用jobs或ps命令可以察看正在执行的jobs。

jobs命令执行的结果,+表示是一个当前的作业,减号表是是一个当前作业之后的一个作业,jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;

G

进程的挂起

后台进程的挂起:

在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num),然后执行stop %num;

在RedHat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;

当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;

H

前台进程的挂起:

ctrl+Z;

I

进程的终止

后台进程的终止:
方法一:
通过jobs命令查看job号(假设为num),然后执行kill %num

方法二:
通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

前台进程的终止:

ctrl+c

kill的其他作用
kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。

SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。

TAGS:
十月 31st, 2016

无论你使用哪种操作系统,你一定会遇到某个行为失常的应用,它把自己锁死并拒绝关闭。在Linux(还有Mac),你可以用一个”kill”命令强制终结它。在这个教程中,我们将展示给你多种方式使用”kill”命令终结应用。

Kill命令和信号

当你执行一个”kill”命令,你实际上发送了一个信号给系统,让它去终结不正常的应用。总共有60个你可以使用的信号,但是基本上你只需要知道SIGTERM(15)和SIGKILL(9)。

你可以用这个命令看到所有信号的列表:

kill -l

·SIGTERM – 此信号请求一个进程停止运行。此信号是可以被忽略的。进程可以用一段时间来正常关闭,一个程序的正常关闭一般需要一段时间来保存进度并释放资源。换句话说,它不是强制停止。

·SIGKILL – 此信号强制进程立刻停止运行。程序不能忽略此信号,而未保存的进度将会丢失。

使用”kill”的语法是:

kill [信号或选项] PID(s) 默认信号(当没有指定的时候)是SIGTERM。当它不起作用时,你可以使用下面的命令来强制kill掉一个进程:

kill SIGKILL PID 或者

kill -9 PID 这里”-9″代表着SIGKILL信号。

如果你不知道应用的PID,仅需要运行这个命令:

ps ux 它会显示所有正在运行的应用还有应用的PID。

22

例如,要kill掉Chrome,我会运行命令:

kill -9 3629 也可以在同一时间kill多个进程。

kill -9 PID1 PID2 PID3

——————————————————————————–

PKill

“pkill”命令允许使用扩展的正则表达式和其它匹配方式。你现在可以使用应用的进程名kill掉它们,而不是使用PID。例如,要kill掉Firefox浏览器,只需要运行命令:

pkill firefox 使用正则表达式匹配的话,你可以输入进程名的部分字符,比如:

pkill fire 为了避免kill掉错误的进程,你应该用一下”pgrep -l [进程名]”列表来匹配进程名称。

Killall

killall同样使用进程名替代PID,并且它会kill掉所有的同名进程。例如,如果你正在运行多个Firefox浏览器的实例,可以用命令把它们全部kill掉:

killall firefox 在Gnome中,你可以使用这个命令重启Nautilus:

killall nautilus

十月 31st, 2016

换操作系统对每个人来说都是一件大事——尤其是许多用户根本不清楚操作系统是什么。

然而,从 Windows 切换到 Linux 特别地困难。这两个操作系统有着不同的前提和优先级,以及不同的处理方式。结果导致 Linux 新手容易混淆,因为他们在 Windows 上面得到经验不再适用。

例如,这里有 7 个 Windows “难民”开始使用 Linux 的时候会犯的错误(没有先后顺序):

7. 选择错误的 Linux 发行版

Linux 有几百个不同的版本,或者按他们的称呼叫做发行版distribution。其中许多是专门针对不同的版本或用户的。选择了错误的版本,你与 Linux 的第一次亲密体验将很快变成一个噩梦。

如果你是在朋友的帮助下切换的话,确认他们的建议是适合你,而不是他们。有大量的文章可以帮助到你,你只需要关注前 20 名左右的或者列在 Distrowatch 的即可,就不太可能会搞错。

更好的做法是,在你安装某个发行版之前先试试它的 Live DVD。Live DVD 是在外设上运行发行版的,这样可以允许你在不对硬盘做任何改动的情况下对其进行测试。事实上,除非你知道怎么让硬盘在 Linux 下可访问,否则你是不会看到你的硬盘的。

6. 期待什么都是一样的

由于经验有限,许多 Windows 用户不知道新的操作系统意味着新的程序和新的处理方式。事实上你的 Windows 程序是无法在 Linux 上运行的,除非你用 WINE 或者 Windows 虚拟机。而且你还不能用 MS Office 或者 PhotoShop —— 你必须要学会使用 LibreOffice 和 Krita。经过这些年,这些应用可能会有和 Windows 上的应用类似的功能,但它们的功能可能具有不同的名称,并且会从不同的菜单或工具栏获得。

就连很多想当然的都不一样了。Windows 用户会特别容易因为他们有多个桌面环境可以选择而大吃一惊——至少有一个主要的和很多次要的桌面环境。

5. 安装软件的时候不知所措

在 Windows 上,新软件是作为一个完全独立的程序来安装的。通常它囊括了其它所需的依赖库。

有两种叫做 Flatpak 和 Snap 的软件包服务目前正在 Linux 上引进类似的安装系统,但是它们对于移动设备和嵌入式设备来说太大了。更多情况下,Linux 依赖于包管理系统,它会根据已安装的包来判断软件的依赖包是否是必需的,从而提供其它所需的依赖包。

笔记本和工作站上的包管理本质上相当于手机或平板电脑上的 Google Play:它速度很快,并且不需要用于安装的物理介质。不仅如此,它还可以节省 20%-35% 的硬盘空间,因为依赖包不会重复安装。

4. 假想软件会自动更新好

Linux 用户认为控制权很重要。Linux 提供更新服务,不过默认需要用户手动运行。例如,大多数发行版会让你知道有可用的软件更新,但是你需要选择安装这些更新。

如果你选择更新的话,你甚至可以单独决定每一个更新。例如,你可能不想更新到新的内核,因为你安装了一些东西需要使用当前的内核。又或者你想要安装所有的安全性更新,但不想把发行版更新到一个新的版本。一切都由你来选择。

3. 忘记密码

许多 Windows 用户因为登录不方便而忘记密码。又或者为了方便起见,经常运行一个管理账户。

在 Linux 上这两种做法都不容易。许多发行版使用 sudo 来避免以 root 登录,特别是那些基于 Ubuntu 的发行版,而其它发行版大多数是安装为禁止 root 运行图形界面。但是,如果你在 Linux 上成功绕开了这些限制,请注意你的大部分 Linux 安全性优势都会无效(其实在 Windows 上也不推荐这样做)。

对了,你是不是在安装程序上看到一个自动登录的选项?那是在不常用的情景下使用的,例如不包含隐私信息的虚拟机。

2. 担心没有碎片整理和杀毒软件

Linux 偶尔需要进行碎片整理,不过只有在恢复分区或者分区差不多满了的时候。并且由于固态硬盘越来越火,碎片整理正在变成过去时,尽管固态硬盘确实需要在任何操作系统上定期运行 trim

同样地,只有当你安装的 Linux 经常传输文件给 Windows 机器的时候,杀毒软件才是一个主要问题。很少有 Linux 病毒或恶意软件存在,并且日常使用非 root 用户、使用强密码、经常备份当前文件就已经足够阻止病毒了。

1. 认为自己没有软件可用

Windows 上的软件是收费的,大多数类别由一家公司独占——例如,办公套装 MS Office 以及图形和设计的 Adobe。这些条件鼓励用户坚持使用相同的应用程序,尽管它们错漏百出。

在 Linux 上,故事情节不一样了。只有少数高端程序是收费的,而且几乎每一类软件都有两三个替代品,所有这些可用的软件都可以在 10 分钟或者更短的时间内下载好。如果一个替代品不合你口味,你可以删掉它然后毫不费力就可以再装一个其它的。在 Linux 上,你几乎总会有选择。

过渡期

可能没有那么多建议可以让 Windows 用户充分准备好切换到 Linux。即使说新用户应该保持开放的心态也是没什么用的,因为他们的期望总是太高,以至于许多用户都没有意识到自己有如此高的期望。

Linux 新手可以做的最好的事情就是调整心态,并且花一点时间来适应它们。过渡期会需要一些功夫,不过,从长远来看,你的多次尝试终会得到回报。

TAGS:
十月 30th, 2016

VPN服务器端配置的准备工作

 

server服务(Server)必需开启,默认开启;

远程注册表服务(remote Registry) 必需开启,默认开启

router路由服务(Routing and Remote Access)必需开启,默认禁止;

windows自带防火墙(windows firewall/internet connection sharing(ICS))必需禁止。

默认情况下所需服务中,远程注册表服务(remote Registry)和server服务(Server)是自动启动的,只有router路由服务(Routing and Remote Access)默认禁止,下面启动相应的服务。

右击桌面上“我的电脑”→“管理”, 进入“计算机管理”后,点左侧的“服务和应用程序”->“服务”,

在服务列表的右侧找到“Routing and Remote Access”,右击点击“属性”,

对所选服务单击右键选属性,

更改服务启动类型为自动,

右键点击“Routing and Remote Access”,点“启动.

 

VPN服务器的基本配置

 

第一步:依次选择“开始”-“管理工具”-“路由和远程访问”,打开“路由和远程访问”服务窗口;再在窗口右边右击本地计算机名,选择“配置并启用路由和远程访问”,

第二步:在出现的配置向导窗口点下一步,进入服务选择窗口,如下图所示。如果你的服务器/VPS有两块网卡,则可有针对性的选择第一项或第三项。大部分人都是玩VPS,也就是只有1张网卡,只能选择“自定义设置”,然后点击下一步,进入“自定义配置”,勾上“VPN访问”和“NAT和基本防火墙”。完成后开启配置后即可开始VPN服务了。

第三步:IP地址指派,右击右边树形目录里的本地服务器名,选择“属性”并切换到IP选项卡

第四步:设置账户的VPN权限,右击“我的电脑”—管理—本地用户和组—用户,选择其中的欲开放VPN拨入权限的用户,如Ceshi用户,右击该用户—属性,进入“拨入”选项页(如下图),将远程访问权限设置为允许访问,确定即可。也可以新建用户New。

第五步:此时VPN可以连上但是上不了网的情况,这时候还需要一个NAT转发服务。上面也已经提到“路由和远程访问”—“IP路由选择”—右击“常规”,选择“新增路由协议”。

在弹出的新路由协议界面选择“NAT/基本防火墙”,下一步。

之后右击“NAT/基本防火墙”,选择“新增接口”,接口选“Local Area Connection”

最后设置下“本地连接”的属性,选“公用接口连接到Internet”-“在此接口上使用NAT”

至此,一个VPN服务器就搭建完成了,你可以利用VPN畅游了。

 

 

十月 30th, 2016

(1) pid文件的内容:pid文件为文本文件,内容只有一行, 记录了该进程的ID。

用cat命令可以看到。

(2) pid文件的作用:防止进程启动多个副本。只有获得pid文件(固定路径固定文件名)写入权限(F_WRLCK)的进程才能正常启动并把自身的PID写入该文件中。其它同一个程序的多余进程则自动退出。

(3) 编程技巧:

调用fcntl设置pid文件的锁定F_SETLK状态,其中锁定的标志位F_WRLCK。

如果成功锁定,则写入进程当前PID,进程继续往下执行。

如果锁定不成功,说明已经有同样的进程在运行了,当前进程结束退出。
lock.l_type = F_WRLCK;
lock.l_whence = SEEK_SET;

if (fcntl(fd, F_SETLK, &lock) < 0){
//锁定不成功, 退出……
}
sprintf (buf, “%d\n”, (int) pid);
pidsize = strlen(buf);
if ((tmp = write (fd, buf, pidsize)) != (int)pidsize){
//写入不成功, 退出……
}

(4) 一些注意事项:
i) 如果进程退出,则该进程加的锁自动失效。
ii) 如果进程关闭了该文件描述符fd, 则加的锁失效。(整个进程运行期间不能关闭此文件描述符)
iii) 锁的状态不会被子进程继承。如果进程关闭则锁失效而不管子进程是否在运行。
(Locks are associated with processes. A process can only have one kind of lock set for each byte of a given file. When any file descriptor for that file is closed by the process, all of the locks that process holds on that file are released, even if the locks were made using other descriptors that remain open. Likewise, locks are released when a process exits, and are not inherited by child processes created using fork.)

(5) 参考资料:
fcntl(文件锁)
表头文件 #include
#include
函数定义int fcntl(int fd, int cmd, struct flock *lock);
函数解释fd:文件描写符
设置的文件描写符,参数cmd代表欲垄断的号召
F_DUPFD
复制参数fd的文件描写符,厉行获胜则归来新复制的文件描写符,
F_GETFD
获得close-on-exec符号,若些符号的FD_CLOEXEC位为0,代表在调用
exec()相干函数时文件将不会关闭
F_SETFD 设置close-on-exec符号,该符号以参数arg的 FD_CLOEXEC位定夺
F_GETFL获得open()设置的符号
F_SETFL改换open()设置的符号
F_GETLK获得文件锁定的事态,依据lock的描写,定夺是否上文件锁
F_SETLK设置文件锁定的事态,此刻flcok,构造的l_tpye值定然是F_RDLCK、F_WRLCK或F_UNLCK,
万一无法发生锁定,则归来-1
F_SETLKW 是F_SETLK的阻塞版本,在无法获得锁时会进去睡眠事态,万一能够获得锁可能捉拿到信号则归来
参数lock指针为flock构造指针定义如下
struct flock {

short l_typejngaoy.com;
short l_whence;
off_t l_start; 锁定区域的开关位置
off_t l_len; 锁定区域的大小
pid_t l_pid; 锁定动作的历程

};
1_type有三种事态:
F_RDLCK读取锁(分享锁)
F_WRLCK写入锁(排斥锁)
F_UNLCK解锁
l_whence也有三种措施
SEEK_SET以文件开始为锁定的起始位置
SEEK_CUR以现在文件读写位置为锁定的起始位置
SEEK_END以文件尾为锁定的起始位置
归来值 获胜则归来0,若有讹谬则归来-1
l_len:加锁区的长度
l_pid:具有阻塞目前历程的锁,其持有历程的历程号储藏在l_pid中,由F_GETLK归来
等闲是将l_start设置为0,l_whence设置为SEEK_SET,l_len设置为0

十月 30th, 2016
PHP 7.1.0 第五个候选版如约而至,Bug 修复

 

在上周发布第四个候选版时,曾明确表示PHP 7.1.0 Candidate 5将在10月27日发布,现在,它如约而至。

更新内容:

核心:

  1. 修正bug#73350(异常:: __ toString()导致循环引用)
  2. 修正bug#73329((Float)“Nano”== NAN)

CLI服务器:

  1. 修正bug#73360(无法使用unicode字符在root里工作)

SQLite3:

  1. 修正错误#73333(2147483647被提取为字符串)

下载地址:

十月 29th, 2016

git的原理非常的美妙,我觉得如果我给非程序员推荐提高工作效率的工具的话,第一,我会推荐 python,第二我会推荐git,第三我会推荐markdown。

今天给朋友的公司,安装了一个gitlab服务器。希望能给他们的工作带来好处。

## 安装步骤

* 按gitlab官网的给出的命令依次执行。

## 启动服务

gitlab-ctl start

## 遇到的坑

如果gitlab启动后,页面访问显示502等错误信息,一般通过 gitlab-ctl status 或 gitlab-ctl tail 查看报错的具体原因。一般都是端口号被占用或者内存无法分配着两个问题。

* 修改nginx监听的端口号(默认是80),也尽量不要用8080,因为gitlab的组件unicorn的默认端口号是8080。设置一个诸如8099的端口号,避免端口号被占用。nginx的配置文件在”/var/opt/gitlab/nginx/conf/gitlab-http.conf”。将”Listen:*:80″改为”Listen:8099″。

* gitlab服务器要求的最小内存是1G,所以服务器内存最好大于1G,如果内存过小,可能会出现“Cannot allocate memory (Errno::ENOMEM)”无法分配内存的错误。解决方案是增加内存或者设置swap交换分区。

TAGS: ,
十月 29th, 2016

谷歌已经基于她的谷歌云平台推出了一个代码编辑器。谷歌产品经理Sachin Kotwani写道,它基于Eclipse Orion,将使人们有可能在浏览器里编辑代码和配置文件。

谷歌的新代码编辑器是Google Cloud Shell的一部分,它提供了一个基于浏览器的命令行界面来管理谷歌云平台上的资源和应用程序。无需安装或更新谷歌云SDK或任何其它所需的工具即可使用Google Cloud Shell,并提供5GB的持久性存储,可用于存储文件和项目。

据Kotwani所说,新的Google Cloud Shell代码编辑器将会允许在谷歌云平台上完成完整的开发流程,甚至无需离开浏览器,而且它能提供缺失的链接,这正是大量的用户所需要的。使用Google Cloud Shell,开发人员除了能够部署和调试应用程序,还将能够从零开始创建文件,并将它们推到谷歌云源库。

新的Google Cloud Shell代码编辑器继承了Eclipse Orion背后的理念,就是尝试新的开发环境的概念,不试图重现单个标签内的经典的IDE内容,旨在将开发经验转移到浏览器上。Kotwani表示,谷歌将继续发展Google Cloud Shell和它的代码编辑器,使它适应一系列任务的环境,包括端到端的开发。

十月 28th, 2016

对于Linux虚拟主机用户,在域名为解析生效之前,我们可以使用临时路径,也就是服务器路径来访问网站或者作为测试.当然,这只针对共享IP,独立IP用户可以直接使用IP来访问网站的.

cPanel服务器的临时路径一般是: http://共享IP/~cpusername

cpusername表示用户的cPanel用户名

 

如果在访问临时路径http://共享IP/~cpusername时出现404 not found的错误,一般因为服务器启用了mod_userdir Protection,将这个保护去除的话,用户就可以使用临时路径了.

具体方法为:

登陆WHM,选择 Main >> Security Center >> Apache mod_userdir Tweak,取消勾选Enable mod_userdir Protection(勾选的话,访问临时路径就会出现404错误),如下图:

%e5%9b%be%e7%89%872

这样用户就可以使用临时路径访问了.

所以当你使用不了临时路径,赶紧联系主机商解决吧!