手把手教你创建个人网站 - 1元 速通篇
最近不少朋友在问我，怎么制作一个网站并且把它发布，让别人可以看到，所以就简单的写一个教程吧本着速通的原则，用最少的时间最少的步骤，达到最终你想要的效果。简单的来讲，制作一个网站，我们需要准备三样东西，分别是：源代码、域名、服务器，这三个通过这一篇文章给大家统统搞定。源代码首先，来搞定源代码吧，源代码我给大家准备一个，我随手写的一个个人主页代码，大家最终搭建完成后就是这个样子(如图)，先点击下载按钮把这个源代码下载下来。 下载代码 代码下载完成以后是一个.zip文件，我们不用管，也不要去解压这个文件，后面用到的时候会讲。搭建好以后是什么效果呢，请戳这个地址预览：http://uyzly.dl01.gg8.xyz/域名写了很多，最后发现域名必须单独拿出来讲，这里面内容太太太多了，本文直接跳过，我们选择虚拟主机+免费域名的方案。服务器我建议新手入门不要直接用VPS，而是使用更加廉价的虚拟主机，VPS最低的价格也需要50元/月，虚拟主机只需要1元/月，对于只想快速做出网站的朋友们来讲，虚拟主机是更划算的，这里我用一个表来对比下，大家自己做出选择：比较项目虚拟主机VPS 云服务器价格成本极低 (约 1元/月)，适合新手试错较高 (通常 50元/月起步)上手难度简单：傻瓜式面板，直接上传代码即可困难：需要学习 Linux 命令和环境配置准备工作零配置：自带 PHP、数据库，开箱即用需配置：需手动安装 Nginx/Apache 等环境域名配套通常附赠免费二级域名，省去备案烦恼需自购域名并手动解析，过程较繁琐维护精力省心：服务器环境由服务商负责维护费神：需要自己负责系统安全和补丁适合人群个人主页、学生作业、小型展示站中大型网站、有特殊软件安装需求的用户本教程以虚拟主机为例，快速演示如何创建一个网站，过几天我会再出一个用VPS搭建站点的教程。注册账户目前国内云计算政策严格，如果需要购买虚拟主机，需要确保你满足以下条件：电子邮件、手机号、满18岁(需要实名认证，不满就用家长的。。。)，三者缺一不可! 国家法律规定，目前国内正规云计算商家均需要实名认证。首先我们打开地址(在这里我使用邦谷云作为演示，这是一家2011年成立的国内老牌云计算企业)，注册一个账号：https://mart.bgidc.com/register注册完成以后登陆，绑定手机号码、实名认证(这里就不写教程了，就是把你的资料递交一下)。开通产品这里我们选虚拟主机，价格是1元/月，后面会再出一篇文章，讲VPS服务器的(价格大概50元/月)。订购地址：https://mart.bgidc.com/cart?fid=3选最低配的就可以，这个一块钱的，学习阶段不要想太多，足够使用。直接点立即购买订购就行，时长选一个月。进入控制面板购买开通产品后，需要进入虚拟主机的控制面板，路径是 左侧导航栏 - 产品与服务 - 云服务器 如图所示。接着在云服务器列表这个界面，找到我们刚刚订购的虚拟主机，点击左侧的操作按钮，就可以进入产品详情界面。在产品详情界面，点击一键登陆控制面板，就可以进入我们的虚拟机控制面板了。虚拟机控制面板是这个样子的，可以对照看一下是不是成功进入了：上传源代码若您跟着教程一步步做到了这一步，那么恭喜，这是我们的最后一步了，你的第一个站点马上就要孵化完成破壳而出！教程开始，在虚拟主机控制面板点击FTP/文件管理，接着点击在线文件管理器，进入到在线文件管理器这个界面，按照图一步一步操作。接着我们需要进入wwwroot目录，wwwroot目录是网站的默认根目录，里面存放的是我们网站的文件，只有把文件放在这个目录下，用户才能通过网站地址访问到。进入wwwroot目录后是这个样子的：接下来我们准备上传我们第一步的时候下载的压缩包文件，文件不需要解压，直接上传！按照下面的步骤一步一步来：首先确定我们在wwwroot的目录下以后，点击上传文件这个按钮，接着点击选择文件选择我们刚刚下载的源代码.zip压缩包上传完成以后是这个样子的，界面中多出来了我刚刚上传的文件：可以看到这个.zip文件的旁边有一个解压按钮，点击这个按钮，解压文件。如果解压以后，发现多了一个 index.html文件，那么恭喜，操作成功，接下来就可以访问我们的网站了！访问站点由于我们没有购买自己的域名，所以这里临时使用赠送的免费域名来访问我们搭建的网站。首先我们点击面板首页按钮，进入面板首页。接着我们需要进入域名绑定界面，步骤如图进入域名绑定界面以后，发现已经绑定好了一个域名，这个域名是免费赠送的，主要主机不到期既可以一直用。注意：不要点击删除，否则你就没有域名用了！点击这个域名，就可以访问我们刚刚创建的网站了！！！进阶·修改网站内容成功访问搭建的网站以后会发现，这个页面的名字、头像等信息都不是我自己的，怎么样修改为我们自己的信息呢，非常的简单，按照下面的教程一步一步来就可以：老样子，进入在线文件管理器，进入wwwroot目录，找到index.html文件。在这个文件的右侧，有一个编辑按钮，点击它。就可以进入这个界面，这个界面中展示的就是整个网页的原始代码了，比如我想改昵称，就找Mr.lun这个文字，替换为你自己的文字，然后点击保存就可以。保存成功以后，刷新页面，内容就会变了～如果修改后内容没有发生改变的话，试试清除浏览器的缓存。
抖音上比较火的利用Three.js开发的手势控制粒子代码
ChatGPT、Codex中转站 注册送5刀，秒用GPT5.5模型。地址：https://lun.pw/今天抖音上偶然刷到的，真是不错，自己也试着开发了一下。预览在线体验体验地址 请戳👇 强烈建议使用电脑体验，手机非常卡顿！https://www.yjln.com/shareCode/TuXingLiZi.html测试机器：M4 Pro 48G（最完美）、M4 16G（流畅）、iPhone 17 Pro （卡顿）源代码如果你的设备比较老旧，可以修改代码第511行，减少粒子的数量即可。const particleCount = 1200000; // 粒子总数：120万代码： 粒子土星 By Mr.lun 物理引擎: 极致模式 | 环境: 太阳系模拟 正在构建百万粒子与行星数据... 土星 数据流状态: 待机 > 开普勒轨道: 运行中 > 粒子总数: 120万+ > 背景环境: 行星已加载 全屏沉浸体验
最近BF疯狂买鸡，就想着有没有一个工具可以批量查看服务器状态，网上一搜，搜到了哪吒面板。安装完毕以后，顺手美化了一下前台样式，代码在此记录、分享一下。图片预览在线预览地址：https://www.qun.gs/代码直接将下面的代码，复制粘贴，放到后台-系统设置-自定义代码(样式和脚本)里面即可。
我的世界0.14.3 安卓版 支持安卓14、流量进服 (附修改教程)
此为0.14.3修改版，修改内容如下：1.支持流量进入服务器 2.支持安卓14使用。仅修改两处代码，除此之外，再无任何修改！下载0.14.3(直接下载)修改教程授人以鱼不如授人以渔，简单的给大家讲一下怎么去修改，大家可以兼容更多版本。修改支持安卓14反编译AndroidManifest.xml，修改找到如下代码：<uses-sdk android:minSdkVersion="17" android:targetSdkVersion="22" />将其中的targetSdkVersion值改为24即可，修改后的代码如下<uses-sdk android:minSdkVersion="17" android:targetSdkVersion="24" />修改支持流量进服编辑classes.dex文件，修改路径为com/mojang/minecraftpe/MainActivity下的类。在MainActivity类中，找到isNetworkEnabled函数。定位到这一部分代码： .line 626 .restart local v1 # "info":Landroid/net/NetworkInfo; :cond_1d const/4 v2, 0x0将IPv4参数中的0x0改为 0x1即可 .line 626 .restart local v1 # "info":Landroid/net/NetworkInfo; :cond_1d const/4 v2, 0x1结语怎么说呢，教程完毕，就是这样简单，试着修改一下吧～
用于简单的监控服务器当前状态，基于PHP方法实现，数据不保证准确。若想要得到更准确的数据，可尝试使用宝塔API方式获取。在线预览地址：https://15w.net/serverInfo/源代码下载：源代码下载使用方法下载源代码后，放置到网站目录 /serverInfo 下，浏览器访问：域名/serverInfo 即可看到效果。CPU核心修改默认是基于4核心的配置，若服务器CPU核心为其他数量，请修改以下代码index.php 第 137 行，这里的4核心，可改为其他内容 CPU占用 4核心 100% index.php 第 137 行，这里的cpus的数值，可改为其他内容var cpus = 4;宝塔面板报错若使用的是宝塔面板环境，请修改网站根目录中的.user.ini文件open_basedir=/www/wwwroot/www.yjln.com/:/tmp/追加代码：:/proc/后：open_basedir=/www/wwwroot/www.yjln.com/:/tmp/:/proc/注意，是追加一个 :/proc/ 代码，请勿复制我的代码。
前言使用套件 Xcode4.6 和 MacOS 10.8.5 理论上可以为iOS4、5、6、7、8、9开发iOS应用程序，我只拿来开发过iOS5和iOS6系统的应用程序，测试完美。注意：当年看的这份教程已经被删除，找不到了，操作起来也很复杂，好在之前制作过系统镜像，可以直接拿来用。我在这里分享一份给大家。下载：MacOS虚拟机（20GB）开始操作下载后解压，我使用的是分卷压缩，防止资源和谐。导入虚拟机下载镜像文件，解压zip，双击文件OS X 10.8.vmx，使用软件VMware Workstation Pro 17打开。运行虚拟机，选择我已复制该虚拟机等待开机。输入开机密码：123456 进入系统。创建项目打开Xcode4.6，简单创建一个项目做测试。具体的Xcode操作自行学习，这里不多概述。。。创建好项目后，点击Run,先在模拟器上跑一跑，可以看到模拟器里成功运行，接着进行下一步！设置无证书打包修改工程设置禁用Xcode自动的签名操作，将工程配置中所有的CodeSigning选项全部设为Don't Code Sign，如图。可能需要先点击“All”让这个选项显示出来。设置自定义脚本在Build Phases中点击右下角的Add Build Phase，然后单击Add Run Script接着输入以下脚本：export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate if [ "${PLATFORM_NAME}" =="iphoneos" ] || [ "${PLATFORM_NAME}" == "ipados"]; then /Applications/Xcode.app/Contents/Developer/iphoneentitlements/gen_entitlements.py"my.company.${PROJECT_NAME}""${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent"; codesign -f -s "iPhone Developer"--entitlements"${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/${PROJECT_NAME}.xcent""${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/" fi编译安装到iOS设备使用数据线将iOS设备和电脑连接，会弹出如下窗口，选择连接到虚拟机。接着点击左上角选择设备，选择你的iOS设备，然后点击Run即可进行真机测试。得到IPA文件安装后，用爱思助手导出即可！补充问题1选择设备的时候，请不要登陆AppleID，登录AppleID会导致签名失败。
原作者PHP源代码350KB，发现代码里面有很多没用的东西，索性重新写了个“精简版”。代码基于handsome主题修改，其他主题如需使用请自行修改代码适配。精简后的PHP代码仅支持Linux系统，在Centos7.6和7.9上测试通过，其他Linux系统未进行测试，兼容性未知。功能演示文件修改 headnav.php文件路径：usr/themes/handsome/component/headnav.php在此处： <?php if (@Utils::getExpertValue("show_static",true) !== false): ?> 追加内容(此处为追加后的代码)： <?php if (@Utils::getExpertValue("show_static",true) !== false): ?> <polyline points="22 12 18 12 15 21 9 3 6 12 2 12"></polyline> 运行状态 CPU占用 2核心 占用内存 磁盘占用 内存缓存 内存缓冲 系统负载 网络状态 IO 实时IO 网络 实时网络 服务器时间 <?php echo $_SERVER['SERVER_SOFTWARE']; ?> WEB服务器 <?php echo $_SERVER['SERVER_PROTOCOL']; ?> 通信协议 <?php echo PHP_VERSION;?> PHP版本 访客信息 持续运行 您的IP 网络地址 浏览器信息 您的设备 <?php echo $_SERVER['REQUEST_METHOD'];?> 请求方法 <?php echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];?> 服务语言 您的设备时间 文件修改 footer.php文件路径：usr/themes/handsome/component/footer.php在此处：<?php $this->options->bottomHtml(); ?> 追加内容(此处为追加后的代码)： <?php $this->options->bottomHtml(); ?> 新建文件 serverInfo.php上述修改完毕之后，在网站的根目录新建 serverInfo.php 文件文件内容如下：<?php /** * 获取当前Unix时间戳 * */ $unixTimestamp = time(); /** * 获取服务器总的运行时长 * */ $serverUptime = getUpTime(); /** * 获取服务器负载 以及CPU使用信息 * */ $serverLoad = GetLoad(); $cpuUsage = GetCPUInfo(); /** * 获取服务器内存信息 * */ $memoryInfo = GetMem(); // 定义要输出的内容 $serverInfo = array( 'serverTime' => date('Y-m-d H:i:s', $unixTimestamp), 'serverUptime' => array( 'days' => $serverUptime['days'], 'hours' => $serverUptime['hours'], 'mins' => $serverUptime['mins'], 'secs' => $serverUptime['secs'] ), 'serverUtcTime' => date('Y/m/d H:i:s', $unixTimestamp), 'diskUsage' => array( 'value' => disk_total_space(__FILE__) - disk_free_space(__FILE__), 'max' => disk_total_space(__FILE__) ) ); $serverStatus = array( 'sysLoad' => array($serverLoad['1m'], $serverLoad['5m'], $serverLoad['15m']), 'cpuUsage' => array( 'user' => $cpuUsage['user'], 'nice' => $cpuUsage['nice'], 'sys' => $cpuUsage['sys'], 'idle' => $cpuUsage['idle'] ), 'memRealUsage' => array( 'value' => $memoryInfo['mRealUsed'], 'max' => $memoryInfo['mTotal'] ), 'memBuffers' => array( 'value' => $memoryInfo['mBuffers'], 'max' => $memoryInfo['mTotal'] ), 'memCached' => array( 'value' => $memoryInfo['mCached'], 'max' => $memoryInfo['mTotal'] ), 'swapUsage' => array( 'value' => $memoryInfo['swapUsed'], 'max' => $memoryInfo['swapTotal'] ), 'swapCached' => array( 'value' => $memoryInfo['swapCached'], 'max' => $memoryInfo['swapTotal'] ) ); $networkStats = array( 'networks' => GetNetwork() ); // 将以上内容合并为一个数组 $output = array( 'serverInfo' => $serverInfo, 'serverStatus' => $serverStatus, 'networkStats' => $networkStats ); // 将数组转换为JSON字符串并输出 echo json_encode($output); /** * 获取系统运行时长 * * @return array */ function getUpTime() { $uptime = (float) @file_get_contents("/proc/uptime"); $days = floor($uptime / 86400); $hours = floor(($uptime % 86400) / 3600); $minutes = floor((($uptime % 86400) % 3600) / 60); $seconds = ($uptime % 3600) % 60; //$time = $days.":".$hours.":".$minutes.":".$seconds; return array( 'days' => $days, 'hours' => $hours, 'mins' => $minutes, 'secs' => $seconds ); } /** * 获取系统负载 * * @return array|false|string[] */ function GetLoad() { if (false === ($str = file_get_contents("/proc/loadavg"))) return []; $loads = explode(' ', $str); if ($loads) { return [ '1m' => $loads[0], '5m' => $loads[1], '15m' => $loads[2], ]; } return []; } function GetCPUInfo() { $load = sys_getloadavg(); $user = $load[0]; $nice = $load[1]; $sys = $load[2]; $idle = 100 - ($user + $nice + $sys); return [ 'user' => $user, 'nice' => $nice, 'sys' => $sys, 'idle' => $idle, ]; } /** * 内存信息 * * @param bool $bFormat 格式化 * * @return array */ function GetMem(bool $bFormat = false) { if (false === ($str = file_get_contents("/proc/meminfo"))) return []; preg_match_all("/MemTotal\s{0,}\:+\s{0,}([\d\.]+).+?MemFree\s{0,}\:+\s{0,}([\d\.]+).+?Cached\s{0,}\:+\s{0,}([\d\.]+).+?SwapTotal\s{0,}\:+\s{0,}([\d\.]+).+?SwapFree\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $mems); preg_match_all("/Buffers\s{0,}\:+\s{0,}([\d\.]+)/s", $str, $buffers); $mtotal = $mems[1][0] * 1024; $mfree = $mems[2][0] * 1024; $mbuffers = $buffers[1][0] * 1024; $mcached = $mems[3][0] * 1024; $stotal = $mems[4][0] * 1024; $sfree = $mems[5][0] * 1024; $mused = $mtotal - $mfree; $sused = $stotal - $sfree; $mrealused = $mtotal - $mfree - $mcached - $mbuffers; //真实内存使用 $rtn['mTotal'] = !$bFormat ? $mtotal : $this->size_format($mtotal, 1); $rtn['mFree'] = !$bFormat ? $mfree : $this->size_format($mfree, 1); $rtn['mBuffers'] = !$bFormat ? $mbuffers : $this->size_format($mbuffers, 1); $rtn['mCached'] = !$bFormat ? $mcached : $this->size_format($mcached, 1); $rtn['mUsed'] = !$bFormat ? ($mtotal - $mfree) : $this->size_format($mtotal - $mfree, 1); $rtn['mPercent'] = (floatval($mtotal) != 0) ? round($mused / $mtotal * 100, 1) : 0; $rtn['mRealUsed'] = !$bFormat ? $mrealused : $this->size_format($mrealused, 1); $rtn['mRealFree'] = !$bFormat ? ($mtotal - $mrealused) : $this->size_format($mtotal - $mrealused, 1);//真实空闲 $rtn['mRealPercent'] = (floatval($mtotal) != 0) ? round($mrealused / $mtotal * 100, 1) : 0; //真实内存使用率 $rtn['mCachedPercent'] = (floatval($mcached) != 0) ? round($mcached / $mtotal * 100, 1) : 0; //Cached内存使用率 $rtn['swapTotal'] = !$bFormat ? $stotal : $this->size_format($stotal, 1); $rtn['swapFree'] = !$bFormat ? $sfree : $this->size_format($sfree, 1); $rtn['swapUsed'] = !$bFormat ? $sused : $this->size_format($sused, 1); $rtn['swapPercent'] = (floatval($stotal) != 0) ? round($sused / $stotal * 100, 1) : 0; $rtn['swapCached'] = $mbuffers; return $rtn; } /** * 获取网络数据 * * @param bool $bFormat * * @return array */ function GetNetwork(bool $bFormat = false) { $rtn = []; $netstat = file_get_contents('/proc/net/dev'); if (false === $netstat) { return []; } $bufe = preg_split("/\n/", $netstat, -1, PREG_SPLIT_NO_EMPTY); foreach ($bufe as $buf) { if (preg_match('/:/', $buf)) { list($dev_name, $stats_list) = preg_split('/:/', $buf, 2); $dev_name = trim($dev_name); $stats = preg_split('/\s+/', trim($stats_list)); $rtn[$dev_name]['name'] = $dev_name; $rtn[$dev_name]['rx'] = !$bFormat ? $stats[0] : $this->netSize($stats[0]); $rtn[$dev_name]['in_packets'] = $stats[1]; $rtn[$dev_name]['in_errors'] = $stats[2]; $rtn[$dev_name]['in_drop'] = $stats[3]; $rtn[$dev_name]['tx'] = !$bFormat ? $stats[8] : $this->netSize($stats[8]); $rtn[$dev_name]['out_packets'] = $stats[9]; $rtn[$dev_name]['out_errors'] = $stats[10]; $rtn[$dev_name]['out_drop'] = $stats[11]; } } return $rtn; }至此，博客已经成功添加添加服务器状态栏，可以刷新后点击状态栏图标查看。宝塔面板报错若使用的是宝塔面板环境，请修改网站根目录中的.user.ini文件open_basedir=/www/wwwroot/www.yjln.com/:/tmp/追加代码：:/proc/后：open_basedir=/www/wwwroot/www.yjln.com/:/tmp/:/proc/