chore: 批量修改文件权限为可执行

将项目内绝大多数文件的权限从644调整为755,统一可执行权限配置
This commit is contained in:
2026-08-02 16:29:01 +08:00
parent cd953adcc0
commit 9bab04be20
905 changed files with 161 additions and 135 deletions
Regular → Executable
+155 -131
View File
@@ -1,7 +1,9 @@
<?php
declare (strict_types = 1);
declare(strict_types=1);
namespace app\command;
use Exception;
use think\console\Command;
use think\console\Input;
@@ -31,9 +33,9 @@ class Lebo extends Command
}
protected function execute(Input $input, Output $output)
{
$this->aria2 = new Aria2('http://127.0.0.1:16800/jsonrpc','11223344');
$this->aria2 = new Aria2('http://192.168.100.106:16800/jsonrpc', '11223344');
$this->completed = false;
while($this->completed === false){
while ($this->completed === false) {
try {
$this->start();
} catch (\Exception $e) {
@@ -47,33 +49,45 @@ class Lebo extends Command
}
private function start()
{
// $savepath = store_path() . '/lebolebo/';
$savepath = 'D:/lebolebo/';
$account = new Account();
$account_info = $account->login('13880615958','robo520');
if($account_info['code'] == 500){
dump($account_info['msg']);
exit;
$savepath = store_path() . '/lebolebo/';
// $savepath = 'D:/lebolebo/';
$account_cache_key = 'lebo_account';
$account_info = Cache::get($account_cache_key);
if ($account_info) {
} else {
$account = new Account();
$account_info = $account->login('13880615958', 'robo520');
if ($account_info['code'] == 500) {
dump($account_info['msg']);
exit;
}
Cache::set($account_cache_key, $account_info, 3600);
dump('账号信息缓存成功');
}
$curl = new Curl();
// $curl = new Curl();
$curr = new Curriculum();
$curr->setHeader('token',$account_info['data']['token']);
$course = $curr->list(0);
$curr->setHeader('token', $account_info['data']['token']);
$course = $curr->list(1);
foreach ($course['data']['list'] as $list){
foreach ($course['data']['list'] as $index => $list) {
$c = $savepath . $list['courseName'];
is_dir($c) || mkdir($c,0755,true);
// dump($index,$list['courseName']);
if ($list['courseName'] != '线上-CSP-J 集训课程') {
continue;
}
is_dir($c) || mkdir($c, 0755, true);
$detail = $curr->detail($list['id']);
$courseCover = $c . '/courseCover.png';
if($detail['data']['courseCover']){
if ($detail['data']['courseCover']) {
$downloadurl = $detail['data']['courseCover'];
$check = $this->checkfile($downloadurl,$courseCover);
if(!$check && !is_file($courseCover)){
$check = $this->checkfile($downloadurl, $courseCover);
if (!$check && !is_file($courseCover)) {
// $result = $curl->_fastDownload($downloadurl,$courseCover);
$this->aria2->addUri(
[$downloadurl],
['dir'=>$c,
'out'=>'courseCover.png'
[
'dir' => $c,
'out' => 'courseCover.png'
]
);
// dump('封面下载结果:',$result);
@@ -82,26 +96,26 @@ class Lebo extends Command
// }
}
$txt = $courseCover . '-下载地址.txt';
$this->savetxt($txt,$downloadurl);
$this->savetxt($txt, $downloadurl);
}
$d = $curr->courseUnitList($list['courseCode']);
$courseUnits = $d['data']['courseUnit'];
if($courseUnits === null){
if ($courseUnits === null) {
continue;
}
foreach ($courseUnits as $courseUnit){
$courseUnitName = $c . '/' . str_ireplace('/','-',$courseUnit['courseUnitName']);
if(!is_dir($courseUnitName)){
foreach ($courseUnits as $courseUnit) {
$courseUnitName = $c . '/' . str_ireplace('/', '-', $courseUnit['courseUnitName']);
if (!is_dir($courseUnitName)) {
dump('创建课程文件夹:' . $courseUnitName);
mkdir($courseUnitName,0755,true);
mkdir($courseUnitName, 0755, true);
}
$selectByCourseUnits = $curr->selectByCourseUnits($courseUnit['courseCode'],$courseUnit['courseUnitCode']);
foreach ($selectByCourseUnits['data'] as $selectByCourseUnit){
$selectByCourseUnits = $curr->selectByCourseUnits($courseUnit['courseCode'], $courseUnit['courseUnitCode']);
foreach ($selectByCourseUnits['data'] as $selectByCourseUnit) {
$this->waiting();
$sessionName = $courseUnitName . '/' . $selectByCourseUnit['sessionName'];
if(!is_dir($sessionName)){
dump('创建课件文件夹:'.$sessionName);
mkdir($sessionName,0755,true);
if (!is_dir($sessionName)) {
dump('创建课件文件夹:' . $sessionName);
mkdir($sessionName, 0755, true);
}
$t = $curr->selectByCourseSessionCode($selectByCourseUnit['courseSessionCode']);
// 0: {type: 1, des: "PPT-HTML"}
@@ -119,20 +133,20 @@ class Lebo extends Command
// 12: {type: 16, des: "课后拓展"}
// 13: {type: 18, des: "素养目标"}
$ts = $t['data'];
foreach ($ts as $kk ){
foreach ($ts as $kk) {
switch ($kk['resourceType']) {
case '1':// PPT-HTML
if(!isset($kk['content'])){
continue;
case '1': // PPT-HTML
if (!isset($kk['content'])) {
break;
}
$filename = $kk['content']['fileName'];
$downloadurl = $kk['content']['fileUrl'];
$file = $sessionName . '/' . $filename;
// 保存下载地址
$txt = "{$file}-下载地址.txt";
$this->savetxt($txt,$downloadurl);
$check = $this->checkfile($downloadurl,$file);
if(!$check && !is_file($file)){
$this->savetxt($txt, $downloadurl);
$check = $this->checkfile($downloadurl, $file);
if (!$check && !is_file($file)) {
dump('下载PPT:' . $file);
// $result = $curl->_fastDownload($downloadurl,$file);
// dump('PPT下载结果:',$result);
@@ -141,18 +155,20 @@ class Lebo extends Command
// }
$this->aria2->addUri(
[$downloadurl],
['dir'=>$sessionName,
'out'=>$filename]
[
'dir' => $sessionName,
'out' => $filename
]
);
}else if($check && !is_file($file)){
if(is_file($check)){
} else if ($check && !is_file($file)) {
if (is_file($check)) {
try {
copy($check,$file);
copy($check, $file);
} catch (Exception $e) {
dump('文件拷贝失败:',$e);
dump('文件拷贝失败:', $e);
exit;
}
}else{
} else {
dump('下载PPT:' . $file);
// $result = $curl->_fastDownload($downloadurl,$file);
// dump('PPT下载结果:',$result);
@@ -161,15 +177,17 @@ class Lebo extends Command
// }
$this->aria2->addUri(
[$downloadurl],
['dir'=>$sessionName,
'out'=>$filename]
[
'dir' => $sessionName,
'out' => $filename
]
);
}
dump('跳过PPT:' . $file);
}else{
} else {
dump('PPT文件已存在:' . $file);
$this->complete($downloadurl,$file);
$this->complete($downloadurl, $file);
}
break;
case '2':
@@ -183,20 +201,20 @@ class Lebo extends Command
case '6':
// 试一试
$shiyishi = $sessionName . '/试一试/';
if(!is_dir($shiyishi)){
mkdir($shiyishi,0755,true);
if (!is_dir($shiyishi)) {
mkdir($shiyishi, 0755, true);
}
$questions = $kk['content']['questions'];
if(!is_array($questions))break;
if (!is_array($questions)) break;
foreach ($questions as $key => $question) {
$filename = $question['fileName'];
$downloadurl = $question['fileUrl'];
$file = $shiyishi . $filename;
// 保存文件下载地址
$txt = "{$file}-下载地址.txt";
$this->savetxt($txt,$downloadurl);
$check = $this->checkfile($downloadurl,$file);
if(!$check && !is_file($file)){
$this->savetxt($txt, $downloadurl);
$check = $this->checkfile($downloadurl, $file);
if (!$check && !is_file($file)) {
// $result = $curl->_fastDownload($downloadurl,$file);
// dump('试一试下载结果:',$result);
// if($result){
@@ -204,15 +222,17 @@ class Lebo extends Command
// }
$this->aria2->addUri(
[$downloadurl],
['dir'=>$shiyishi,
'out'=>$filename]
[
'dir' => $shiyishi,
'out' => $filename
]
);
}else if($check && !is_file($file)){
copy($check,$file);
} else if ($check && !is_file($file)) {
copy($check, $file);
dump('跳过试一试:' . $file);
}else{
} else {
dump('试一试文件已存在:' . $file);
$this->complete($downloadurl,$file);
$this->complete($downloadurl, $file);
}
}
break;
@@ -224,30 +244,30 @@ class Lebo extends Command
break;
case '13':
// 教辅
if(!isset($kk['content']['resourceList'])){
continue;
if (!isset($kk['content']['resourceList'])) {
break;
}
$jiaofupath = $sessionName . '/教辅/';
if(!is_dir($jiaofupath)){
mkdir($jiaofupath,0755,true);
if (!is_dir($jiaofupath)) {
mkdir($jiaofupath, 0755, true);
}
$resourceLists = $kk['content']['resourceList'];
foreach($resourceLists as $resourceList){
if(empty($resourceList['fileName'])){
foreach ($resourceLists as $resourceList) {
if (empty($resourceList['fileName'])) {
continue;
}
$file = $jiaofupath . $resourceList['fileName'] ;
if(Str::endsWith($file,['.mp4','.mov'])){
$file = $jiaofupath . $resourceList['fileName'];
if (Str::endsWith($file, ['.mp4', '.mov'])) {
$dd = $curr->getVideoUrl($resourceList['fileUrl']);
$downloadurl = $dd['data'];
}else{
} else {
$downloadurl = $resourceList['fileUrl'];
}
// 保存下载地址
$txt = "{$file}-下载地址.txt";
$this->savetxt($txt,$downloadurl);
$check = $this->checkfile($downloadurl,$file);
if(!$check && !is_file($file)){
$this->savetxt($txt, $downloadurl);
$check = $this->checkfile($downloadurl, $file);
if (!$check && !is_file($file)) {
dump('下载教辅:' . $file);
// $result = $curl->_fastDownload($downloadurl,$file);
// dump('教辅下载结果:',$result);
@@ -256,41 +276,43 @@ class Lebo extends Command
// }
$this->aria2->addUri(
[$downloadurl],
['dir'=>$jiaofupath,
'out'=>$resourceList['fileName']]
[
'dir' => $jiaofupath,
'out' => $resourceList['fileName']
]
);
}else if($check && !is_file($file)){
copy($check,$file);
} else if ($check && !is_file($file)) {
copy($check, $file);
dump('跳过教辅:' . $file);
}else{
} else {
dump('教辅文件已存在:' . $file);
$this->complete($downloadurl,$file);
$this->complete($downloadurl, $file);
}
}
break;
case '14':
// 备课
if(!isset($kk['content']['resourceList'])){
continue;
if (!isset($kk['content']['resourceList'])) {
break;
}
$beikepath = $sessionName . '/备课/';
if(!is_dir($beikepath)){
mkdir($beikepath,0755,true);
if (!is_dir($beikepath)) {
mkdir($beikepath, 0755, true);
}
$resourceLists = $kk['content']['resourceList'];
foreach($resourceLists as $resourceList){
$file = $beikepath . $resourceList['fileName'] ;
if(Str::endsWith($file,['.mp4','.mov','.MP4','.mkv','.wmv'])){
foreach ($resourceLists as $resourceList) {
$file = $beikepath . $resourceList['fileName'];
if (Str::endsWith($file, ['.mp4', '.mov', '.MP4', '.mkv', '.wmv'])) {
$dd = $curr->getVideoUrl($resourceList['fileUrl']);
$downloadurl = $dd['data'];
}else{
} else {
$downloadurl = $resourceList['fileUrl'];
}
// 保存下载地址
$txt = "{$file}-下载地址.txt";
$this->savetxt($txt,$downloadurl);
$check = $this->checkfile($downloadurl,$file);
if(!$check && !is_file($file)){
$this->savetxt($txt, $downloadurl);
$check = $this->checkfile($downloadurl, $file);
if (!$check && !is_file($file)) {
dump('下载备课:' . $file);
// $result = $curl->_fastDownload($downloadurl,$file);
// dump('备课下载结果:',$result);
@@ -299,23 +321,25 @@ class Lebo extends Command
// }
$this->aria2->addUri(
[$downloadurl],
['dir'=>$beikepath,
'out'=>$resourceList['fileName']]
[
'dir' => $beikepath,
'out' => $resourceList['fileName']
]
);
}else if($check && !is_file($file)){
copy($check,$file);
} else if ($check && !is_file($file)) {
copy($check, $file);
dump('跳过备课:' . $file);
}else{
} else {
dump('备课文件已存在:' . $file);
$this->complete($downloadurl,$file);
$this->complete($downloadurl, $file);
}
}
break;
case '15':
// 课程内容
if(is_null($kk['content']['courseContent']))break;
if (is_null($kk['content']['courseContent'])) break;
$file = "{$sessionName}/课程内容.txt";
$this->savetxt($file,strip_tags($kk['content']['courseContent']));
$this->savetxt($file, strip_tags($kk['content']['courseContent']));
break;
case '16':
break;
@@ -332,76 +356,76 @@ class Lebo extends Command
}
$this->completed = true;
}
private function checkfile($url,$file)
private function checkfile($url, $file)
{
$key = 'lebolebo_check_header_'.md5($url);
$key = 'lebolebo_check_header_' . md5($url);
try {
if(($head = Cache::get($key,null)) === NULL ){
$head = @get_headers($url,1);
if (($head = Cache::get($key, null)) === NULL) {
$head = @get_headers($url, true);
if ($head === false) {
dump('获取文件信息失败,直接重新下载'.$file);
dump('获取文件信息失败,直接重新下载' . $file);
return false;
}
Cache::set($key,$head,86400);
Cache::set($key, $head, 86400);
}
$kk = 'lebolebo_file_' . pathinfo($file,PATHINFO_BASENAME);
if(isset($head['Content-Length']) && ($size = intval($head['Content-Length']))){
$kk = 'lebolebo_file_' . pathinfo($file, PATHINFO_BASENAME);
if (isset($head['Content-Length']) && ($size = intval($head['Content-Length']))) {
$kk .= $size;
if(is_file($file) && ($size !== filesize($file))){
dump('文件大小不符,重新下载'.$file);
if (is_file($file) && ($size !== filesize($file))) {
dump('文件大小不符,重新下载' . $file);
unlink($file);
return false;
}
}
if(isset($head['ETag'])){
if (isset($head['ETag'])) {
$t = $kk . md5($head['ETag']);
if(Cache::has($t)){
if (Cache::has($t)) {
return Cache::get($t);
}
}
if(isset($head['Content-MD5'])){
if (isset($head['Content-MD5'])) {
$t = $kk . md5($head['Content-MD5']);
if(Cache::has($t)){
if (Cache::has($t)) {
return Cache::get($t);
}
}
} catch (Exception $e) {
dump('检查文件失败:',$url,$file,$e);
dump('检查文件失败:', $url, $file, $e);
exit;
}
return false;
}
private function complete($url,$file)
private function complete($url, $file)
{
$key = 'lebolebo_check_header_' . md5($url);
try {
if(($head = Cache::get($key,null)) === NULL ){
$head = @get_headers($url,1);
if($head === false){
if (($head = Cache::get($key, null)) === NULL) {
$head = @get_headers($url, 1);
if ($head === false) {
return false;
}
Cache::set($key,$head,86400);
Cache::set($key, $head, 86400);
}
$kk = 'lebolebo_file_' . pathinfo($file,PATHINFO_BASENAME);
if(isset($head['Content-Length'])){
$kk = 'lebolebo_file_' . pathinfo($file, PATHINFO_BASENAME);
if (isset($head['Content-Length'])) {
$kk .= intval($head['Content-Length']);
}
if(isset($head['ETag'])){
if (isset($head['ETag'])) {
$t = $kk . md5($head['ETag']);
Cache::set($t,$file,86400);
Cache::set($t, $file, 86400);
}
if(isset($head['Content-MD5'])){
if (isset($head['Content-MD5'])) {
$t = $kk . md5($head['Content-MD5']);
Cache::set($t,$file,86400);
Cache::set($t, $file, 86400);
}
} catch (Exception $e) {
dump($e);
exit;
}
}
private function savetxt(string $file,string $content)
private function savetxt(string $file, string $content)
{
if(is_file($file)){
if (is_file($file)) {
unlink($file);
}
$myfile = fopen($file, "w");
@@ -412,13 +436,13 @@ class Lebo extends Command
private function waiting()
{
$num = 1;
while($num > 0){
while ($num > 0) {
$activeDownloads = $this->aria2->getGlobalStat();
$num = intval($activeDownloads['result']['numWaiting']);
if($num > 10){
dump('当前任务过多,等待任务数:',$num);
if ($num > 10) {
dump('当前任务过多,等待任务数:', $num);
sleep(1);
}else{
} else {
break;
}
}
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File