git删除远程分支后,本地依然能看到的解决办法

今天切换分支后,发现很多远程已经删除的分支在本地依然可以看到。

使用命令 git remote show origin,可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息。

分支状态 (use 'git remote prune' to remove)

此时我们可以看到那些远程仓库已经不存在的分支,根据提示,使用

 git remote prune origin

命令来同步删除了那些远程不存在的分支。

发表在 服务器 | 标签为 | 留下评论

yii2自带官方queue队列模块使用方法

今天为了熟悉yii2队列模块如何,查了下官方有,首先要安装扩展插件,在项目目录命令行模式下执行以下代码:

php composer.phar require --prefer-dist yiisoft/yii2-queue

或者添加以下内容

"yiisoft/yii2-queue": "~2.0"

到composer.json文件里面,然后执行composer update。

添加配置在common\config公共目录下的main.php或main-local.php选择一个加入以下内容。其中队列保存信息可以选择file,redis,db等各种数据存储方式,这里首先选择文件方式,其它根据自己需求选择测试。

<?php
return [
    'components' => [
        'redis' => [
            'class' => 'yii\redis\Connection',
            'hostname' => '192.168.0.100',
            'port' => 6379,
            'database' => 0,
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'queue' => [//队列文件方式
            'class' => \yii\queue\file\Queue::class,
            'as log' => \yii\queue\LogBehavior::class,//错误日志 默认为 console/runtime/logs/app.log
            'path' => '@console/runtime/queue',//这样控制台才能操作到
            //'path' => '@runtime/queue',
        ],
        /*'queue' => [//队列redis
            'class' => \yii\queue\redis\Queue::class,
            'redis' => 'redis', // 连接组件或它的配置
            'channel' => 'queue', // Queue channel key
        ],*/
    ],
    'bootstrap' => [
        'queue', // 把这个组件注册到控制台
    ],
];

接着就要创建相关文件了

首先在common\components公共目录下创建Job.php文件,内容如下,队列执行的任务类,让这个类实现 \yii\queue\JobInterface 接口就可以了。

<?php
/**
 * Created by PhpStorm.
 * User: ken
 * Date: 2018/7/12
 * Time: 16:19
 */

namespace common\components;
use yii\base\BaseObject;


class Job extends BaseObject implements \yii\queue\JobInterface
{
    public $url;
    public $file;

    public function execute($queue)
    {
        file_put_contents($this->file, file_get_contents($this->url));
    }
}

然后就在项目任意控制器下,添加以下内容来添加队列的内容:测试环境是windows

use common\components\Job;
public function actionJob(){
   //添加任务到队列
   Yii::$app->queue->push(new Job([
   'url' => '//www.netpc.com.cn/wp-content/uploads/2018/06/12080502tmd.jpg',
   'file' => 'c:\1.jpg',
   ]));
   // 将作业推送到队列并获得其ID
   $id=Yii::$app->queue->delay(1 * 30)->push(new Job([
      'url' => '//www.netpc.com.cn/wp-content/uploads/2018/06/12080502tmd.jpg',
      'file' => 'c:\2.jpg',
   ]));
   // 这个作业等待执行。
   //Yii::$app->queue->isWaiting($id);
   // Worker 从队列获取作业,并执行它。
   //Yii::$app->queue->isReserved($id);
   // Worker 作业执行完成。
   //Yii::$app->queue->isDone($id);

}

执行后会在@console/runtime/queue目录下生产index.data和jobXXX.data一堆任务文件,XXX是任务编号。

添加完队列后就要来执行它了,命令行下控制台执行队列worker,windows下是运行cmd,对应项目目录下,执行以下命令。当执行成功一个任务后会删除对应文件同时更新index.data文件。

yii queue/clear//清空初始化

yii queue/run// 执行

yii queue/listen //监听队列

yii queue/info来//队列状态

其它内容可以参考官方网址:

https://github.com/yiisoft/yii2-queue/blob/master/docs/guide-zh-CN/README.md

 

发表在 服务器 | 标签为 , | 留下评论

yii2命令行控制台Console操作

有时候php需要在命令行下来完成一些操作,这时候就需要命令行控制台来协助你完成了。在项目目录上创建console\controllers\indexController.php文件,复制以下代码直接运行就能看到效果了。

<?php
/**
 * Created by PhpStorm.
 * User: ken
 * Date: 2018/7/17
 * Time: 20:08
 */

namespace console\controllers;
use yii\helpers\Console;
use yii\console\Controller;

class IndexController extends Controller{
    public function actionIndex(){

        //进度条效果
        Console::startProgress(0, 100);
        for ($n = 1; $n <= 100; $n++){
            usleep(100); Console::updateProgress($n, 100);
        }
        Console::endProgress();

        //字体颜色 只是在linux下有效果 windows出现一堆x
        $hello = Console::ansiFormat("Hello",[Console::FG_YELLOW,Console::BG_BLUE]);//字体和背景颜色
        $world = Console::ansiFormat("World",[Console::FG_GREEN]);
        Console::output("{$hello} {$world}");

        Console::output(Console::ansiFormat("normal",[Console::NORMAL]));//正常
        Console::output(Console::ansiFormat("bold",[Console::BOLD]));//粗体
        Console::output(Console::ansiFormat("italic",[Console::ITALIC]));//斜体
        Console::output(Console::ansiFormat("underline",[Console::UNDERLINE]));//下划线
        Console::output(Console::ansiFormat("negative",[Console::NEGATIVE]));

        //用户输入
        $name = Console::input("请输入你的名字:");
        $formatName = Console::ansiFormat($name,[Console::FG_YELLOW]);
        Console::output("你的名字是:{$formatName}");

        //选择单选题
        $sex = Console::select("性别:",[1=>'男',2=>'女']);
        $formatSex = Console::ansiFormat($sex,[Console::FG_YELLOW]);
        Console::output("你的性别是:{$formatSex}");

        //对或错
        if (Console::confirm("Are you sure?")){
            Console::output("user input yes");
        }else{
            Console::output("user input no");
        }

        //必填 强行验证
        Console::prompt("你的名字",['required'=>true,'error'=>'必须输入']);
        /* 关于prompt方法主要是第二个参数进行限制,这是一个数组类型的参数,里面的值为
        required 真假,是否必须填写
        default 默认值
        pattern 正则匹配
        validator 自定义验证函数
        error 错误信息*/
    }
}
发表在 服务器 | 标签为 , | 留下评论

php在数组开头插入一个或多个元素单元

如果使用php系统自带的array_unshift() 函数将传入的单元插入到 array 数组的开头。刚好的我下表是数字,不符合需求。该函数注意单元是作为整体被插入的,因此传入单元将保持同样的顺序。所有的数值键名将修改为从零开始重新计数,所有的文字键名保持不变。

发现官方文档下面有另外一种方法,直接使用加法还简单,按数组相加循序计算。

$someArray=array(224=>'someword1', 228=>'someword2', 102=>'someword3', 544=>'someword3',95=>'someword4');
$someArray=array(100=>'Test Element 1 ',255=>'Test Element 2')+$someArray;
 ?>

运行结果

array(
 100=>'Test Element 1 ',
 255=>'Test Element 2'
 224=>'someword1',
 228=>'someword2',
 102=>'someword3',
 544=>'someword3',
 95=>'someword4'
 );

注意相同key是会被覆盖的。

发表在 服务器 | 标签为 | 留下评论

php里??和?:的区别

php语法:
$c=$a??$b;等同于 $c=isset($a)?$a:$b;
$c=$a?:$b;等同于 $c=$a?$a:$b;

发表在 服务器 | 标签为 | 留下评论

kartik-v/yii2-widget-fileinput删除前询问提示事件

最近使用kartik-v/yii2-widget-fileinput结合yii2做项目来实现单图、多图上传图片,异步同步删除图片还是不错的,带预览功能。找了半天网上都没有,应该很少人用吧,最后发现官网有文档。下面红色部分代码处理:

<?php $form = ActiveForm::begin(["options" => ["enctype" => "multipart/form-data"]]);  ?>
<?php
echo $form->field($comment_image_model, 'image[]')->label('点评图')->widget(FileInput::classname(), [
    'options' => ['multiple' => true],
    'pluginOptions' => [
        // 需要预览的文件格式
        'previewFileType' => 'image',
        // 预览的文件
        'initialPreview' => $p1,
        // 需要展示的图片设置,比如图片的宽度等
        'initialPreviewConfig' => $p2,
        // 是否展示预览图
        'initialPreviewAsData' => true,
        //是否重写初始化的图片
        'overwriteInitial'=>false,
        // 异步上传的接口地址设置
        'uploadUrl' => Url::toRoute(['image-upload']),
        // 异步上传需要携带的其他参数,比如商品id等
        'uploadExtraData' => [
            'goods_id' => $id,
        ],
        'uploadAsync' => true,
        // 最少上传的文件个数限制
        'minFileCount' => 1,
        // 最多上传的文件个数限制
        'maxFileCount' => 10,
        // 是否显示移除按钮,指input上面的移除按钮,非具体图片上的移除按钮
        'showRemove' => false,
        // 是否显示上传按钮,指input上面的上传按钮,非具体图片上的上传按钮
        'showUpload' => true,
        //是否显示[选择]按钮,指input上面的[选择]按钮,非具体图片上的上传按钮
        'showBrowse' => true,
        // 展示图片区域是否可点击选择多文件
        'browseOnZoneClick' => true,
        // 如果要设置具体图片上的移除、上传和展示按钮,需要设置该选项
        'fileActionSettings' => [
            // 设置具体图片的查看属性为false,默认为true
            'showZoom' => true,
            // 设置具体图片的上传属性为true,默认为true
            'showUpload' => true,
            // 设置具体图片的移除属性为true,默认为true
            'showRemove' => true,
        ],
    ],
    // 一些事件行为
    'pluginEvents' => [
        // 上传成功后的回调方法,需要的可查看data后再做具体操作,一般不需要设置
        "fileuploaded" => "function (event, data, id, index) {
            console.log(data);
        }",
        "filebeforedelete" => "function (event, data, id, index) {//找了半天 官网有文档 应该很少人用
            var aborted = !window.confirm('你确定要删除该图片吗?');
            if (aborted) {
                //window.alert('File deletion was aborted! ');
            };
            return aborted;
        }",
    ],
]);
?>

附带官网地址

事件说明
http://plugins.krajee.com/file-input/plugin-events#filebeforedelete

事件演示

http://plugins.krajee.com/file-plugin-methods-demo#delete-validation-1

http://plugins.krajee.com/file-plugin-methods-demo#delete-validation-2

有问题留言。

发表在 服务器 | 标签为 , | 留下评论

Yii 2.0 dropDownList无法默认选择

今天使用使用ActiveForm小部件dropDownList表单。以为在后面的选项加入id选择值

<?= $form->field($model, 'member_id')->dropDownList($member,
[
    '1' => ['selected' => 'selected']
]) 
?>

这样就可以了,其实不对,它是根据$model模型对应的字段内容来自动选择的。$model->member_id如果有id,它就会selected上了,不需要你额外赋值。

也可以一开始就选择默认值,但是不是以上参数,要用value

<?= $form->field($model, 'member_id')->dropDownList($member,
['prompt'=>'选择会员','value' => 3]) 
?>

这样就可以了,如果直接用html的dropDownList也可以

<?= Html::dropDownList( 'member_id',null,$member,
[  
 'options' => ['5' => ['selected' => true]],  
 'prompt' =>['text'=>'顶级栏目', 'options'=>['value'=>0]],  
 'style'=>'width:200px',  
]
) 
?>
发表在 服务器 | 标签为 | 留下评论

git pull时出现冲突 从远程库内容拉取强行覆盖本地代码

不知道为什么pull后,团队修改过的代码文件会和本地没有修改过的文件产生冲突,放弃本地修改。

首先删除文件或修改名称后尝试从远程拉一个下来:

git checkout — 文件路径

最后实在不行就备份好文件后整个版本恢复,切记要先备份,防止你忘记了什么文件后悔莫已。

git reset –hard origin/dev //下载某个分支
git reset –hard origin/master //把HEAD指向最新下载的主版本

发表在 服务器 | 标签为 | 留下评论

安装TortoiseGit2.6最新版本详细图解

首先到https://tortoisegit.org/download/下载TortoiseGit-LanguagePack-2.6.0.0-64bit-zh_CN.msi最新windows版本,点击msi开始安装,一开始都是默认,下一步。

点击完成 选择语言 选择git安装目录 填写名称和邮箱

如果里需要配置github公钥密钥的话,可以在这里设置选择ssh方式,如果单纯使用TortoiseGit自身的方式,就选择TortoiseGitPlink方式,点击右边putty配置生成ppk密钥。

进入putty key界面后,下面选择ecdsa类型,点击Generate。 生成密钥 成功后复制key和相关信息。

点击save private key保存ppk 点击是,选择路径保存即可。最后关闭putty,返回刚才界面点击完成即可。

发表在 服务器 | 标签为 , | 留下评论

同时可用git命令clone和TortoiseGit拉取代码不需要密码

因为工作需要在windows7下使用git分布式版本控制系统,需要同时可以在git命令行模式或TortoiseGit拉取代码而不需要每次输入密码。

这时候需要同时安装git和TortoiseGit。

先到https://git-scm.com/download/win和https://tortoisegit.org/download/分别下载最新的git和TortoiseGit。

git使用命令ssh-keygen -C “邮箱地址” -t rsa产生的密钥在TortoiseGit中不能用。TortoiseGit 使用扩展名为ppk的密钥,而不是ssh-keygen生成的rsa密钥。

使用git通常都是在服务端添加上你本地生成的无设置密码的密钥即可,密钥一般在安装git后生成在C:\Users\Administrator\.ssh目录下*.pub,如果没有可使用ssh-keygen命令生成。

git clone命令成功可控代码库后,关键一步道了这里只是需要把TortoiseGit设置网络里面的ssh客户端位置C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe,修改成成git安装目录下的ssh.exe即可。如果你安装过程已经选择了使用OpenSSH方式我想这里也应该不用修改了。不然拉取等操作的时候都会提示需要输入密码。

发表在 服务器 | 标签为 | 留下评论