@上善若水,对了,把
$CC_DATA
放在非tmpfs里性能会很差,因为宝塔支持tmpfs,所以最佳方案是撤销修改:cp config/security.default.php config/security.php
注意:请先执行步骤13。如果你没有执行过
php ~/hu60wap6/src/script/init.php
,说明你错过了步骤13。如果你先执行了步骤15,请在执行步骤13后再次执行步骤15。
步骤15:修改配置文件中的无效路径。
同样是php8.1,dev.hu60.cn可以打开,只是有一堆警告:
https://dev.hu60.cn/q.php/那为什么Termux上的打不开?看起来问题不是因为不兼容。
报错发生在
cc.php
,是文件打开失败。哦,是配置的问题!
cc.php
默认写入位置在/dev/shm/
和/tmp/
,安卓写不了。执行以下命令替换写入路径为
~/hu60wap6/src/temp/
:sed -i "s#'/dev/shm/#ROOT_DIR.'/temp/#g" ~/hu60wap6/src/config/security.php sed -i "s#'/tmp/#ROOT_DIR.'/temp/#g" ~/hu60wap6/src/config/security.php mkdir ~/hu60wap6/src/temp/
然后再访问看看:
哈,变成打不开数据库错误了。看起来修复配置中的无效路径完成了。
@上善若水,请仔细阅读这一步,理解它到底做了什么,看一看修改后的文件变成了什么样子。
https://hu60.cn/q.php/bbs.topic.102524.2.html?floor=23#23
我决定修改这一步,使用
ROOT_DIR
代替绝对路径,防止移动文件夹后遇到错误。
注意:请先执行步骤13。如果你没有执行过
php ~/hu60wap6/src/script/init.php
,说明你错过了步骤13。如果你先执行了步骤16,请在执行步骤13后再次执行步骤16。
步骤16:修复数据库打不开问题
打不开数据库的原因是
No such file or directory
,为什么PHP连接数据库,不说端口无法访问,却报错说文件不存在?原来连接本地数据库(
localhost
)并不会走网络,走的是文件(本地unix套接字),文件在这里:ls一下就会发现文件真的不存在:
ls /data/data/com.termux/files/usr/tmp/mysqld.sock
而且就算修改配置让mysql把这个文件创建出来,最后也不能正常使用。看起来是mysql的unix套接字和安卓有兼容性问题(php-fpm却没有,奇怪)。
所以只能退而求其次,让PHP去连接3306端口。执行以下命令:
sed -i "s/'localhost'/'127.0.0.1'/g" ~/hu60wap6/src/config/db.php
此外我们还需要修改连接数据库的用户名和密码,默认是
root
和root
,但我们创建的是hu60
和hu60
。执行以下命令:sed -i "s/'root'/'hu60'/g" ~/hu60wap6/src/config/db.php
@上善若水,登录后别选数据库,切换到“账户”选项卡,新建一个用户,勾选“创建同名数据库”。
@上善若水,好吧
@上善若水,你发给我的文件本身就不完整,修改之前也打不开。
@上善若水,tar会保留符号连接,解压时如果解压软件不支持符号连接跟随,符号连接就会丢失,或者只解压出一个内容是路径的错误文件。
@上善若水,这样可以,出的两个错误无关紧要:
cp -rL hu60wap6/src /sdcard
@上善若水,哦对了,不打包,用
cp -r
直接复制到存储卡可能可以,因为cp
在目标目录不支持符号连接的时候会复制整个文件。呃,并不行
@上善若水,但是,虎绿林程序与ksweb不兼容:
@上善若水,这部分需要修改:
location ~* \.php$ { …… }
改成(路径自己替换。如果想让别人帮忙替换,应该发文字而不是截图):
location ~ [^/]\.php(/|$) { root /data/data/com.termux/files/usr/share/nginx/html; fastcgi_pass unix:/data/data/com.termux/files/usr/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi_params; # parse and set $_SERVER['PATH_INFO'] set $real_script_name $fastcgi_script_name; if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") { set $real_script_name $1; set $path_info $2; } fastcgi_param SCRIPT_FILENAME $document_root$real_script_name; fastcgi_param SCRIPT_NAME $real_script_name; fastcgi_param PATH_INFO $path_info; }
Linux命令行小知识
cd
是什么?change directory(改变目录)
你可以
cd
到其他目录看看:
..
表示上级目录,可以级联,比如../..
上两级目录。
为什么不能用
start.sh
执行脚本,必须用~/start.sh
?这是一个安全措施。假设你解压了一个压缩包,想执行
ls
看看里面有什么,结果别有用心的人往里面放了一个可执行文件ls
,一执行是一个勒索病毒,那不就糟了。所以当你不指定路径时,只会执行在
PATH
环境变量中列出的那些文件夹里面的可执行文件和脚本。主目录不在PATH
环境变量中,所以必须指定路径才能执行。指定路径有两种方法,一种是绝对路径,无论你cd到了哪里都能执行成功:
~/start.sh
还有一种是相对路径:
./start.sh
你必须先cd到主目录才能执行成功,否则就找不到文件,因为它表示当前目录内的
start.sh
PATH环境变量?这是什么?
echo $PATH
默认就一个文件夹,但是也可以设置为冒号分隔的多个文件夹。具体就不讲了,你可以自己搜索资料。
Linux命令行小知识
~
是什么?
~
是主目录的简写。在Termux中,主目录是/data/data/com.termux/files/home
,太长了。还好我们可以用~
代替。你每写一个~
,就相当于写下了/data/data/com.termux/files/home
。注意,
~
不能用在引号中,否则会失去代表主目录的效果,就变成了~
字符本身。单引号双引号都不可以。那在引号里面怎么表示主目录?
用
$HOME
代替。注意只能用在双引号里。单引号里不支持任何代替方式,只能写完整路径。
为什么你知道主目录是
/data/data/com.termux/files/home
?图中的三种方法可以确定:
如何停止网站?
创建一个停止脚本:
cat > ~/stop.sh <<EOF # 结束网站进程 killall php-fpm nginx mariadbd # 等待进程结束 sleep 1 # 检查 pstree EOF
给执行权限:
chmod +x ~/stop.sh
停止网站:
~/stop.sh
以后每次要停止网站,运行
~/stop.sh
即可。
问题:为什么是mariadbd?
回答1:这是我们从pstree里面看到的进程名称。
回答2:结尾的d表示这是一个守护进程(daemon),很多服务进程都会这么命名,比如httpd、crond。
问题:为什么不用
~/../usr/etc/init.d/mysql stop
?回答:亲测无效,报错说找不到pid。所以还是用killall吧。
问题:killall会不会导致数据损坏?
不会,因为它并不是强行停止进程,而是给进程发信号要它主动停止运行。所以进程是有机会正常退出的。如果进程真的卡住了,那就算执行了killall也不会退出,你就会知道它卡住了。
如果进程真的卡住了,可以用
killall -9 进程名
来结束进程,注意这可以导致数据损坏,因为进程没有任何机会正常退出,就算进程没有卡住也没机会。
步骤1,需要由 @老虎会游泳 进行:
修复虎绿林程序和PHP8.1的兼容性问题,并且放弃对PHP5.4的支持(因为修复PHP8.1兼容性问题必然导致和PHP5.4不兼容)。正在进行中。
打开Termux自动启动网站
创建好
~/run.sh
之后,再执行以下命令即可加入自启动:echo ~/run.sh > ~/.profile
如何测试?
- 在通知栏退出Termux会话。
- 重新打开Termux。
成功自启。
取消自启:
rm ~/.profile