Redis在windows下安装运行

标 签:

1.redis官网下地址:https://redis.io/download,但在官方网站上并没有windows版本,官方是不支持windows的.

2.window版本都是些大牛封装,下载最新版本,现在提供几个下载地址:

    a.https://github.com/ServiceStack/redis-windows/tree/master/downloads github的serviceStack.

    b.https://github.com/dmajkic/redis/downloads github的dmajkic

3.下载php的redis的扩展,在php的官网上搜索redis,地址:http://pecl.php.net/package/redis,选择对应的版本,widows是选择 dll 的链接.

4.注意php版本和线程安全,使用phpinfo()打印,然后看一下,php版本,位数,线程安全等信息.

5.下载正确的版本后,解压把里面的php_redis.dll和php_redis.pdb.放在php/ext目录下,然后在php.ini里面,添加

extension=redis ;等于7.2或以上的php版本添加
extension=php_redis.dll ;小于7.2以下的php版本添加

6.启动redis服务器,第二步已经把redis服务器下载好后解压在一个地方,打开里面的 redis.windows.conf ,修改里面的两项配置:

# maxmemory <bytes> ,注意的是,这里的单位是bytes
maxmemory 102400000

# requirepass foobared 如果需要密码验证,就加入如下配置
requirepass 123

7.,然后运行dos窗口,cd 到解压的 redis 服务器目录里,运行命令:

redis-server.exe redis.windows.conf

看到如果的,表示启动成功了,注意的是,不能关闭这个窗口,关闭了,redis服务也关闭了.

                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.0.503 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 13748
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'

[13748] 07 Jan 09:14:41.332 # Server started, Redis version 3.0.503
[13748] 07 Jan 09:14:41.332 * The server is now ready to accept connections on port 6379
[13748] 07 Jan 09:52:34.986 * 1 changes in 900 seconds. Saving...
[13748] 07 Jan 09:52:34.989 * Background saving started by pid 26788
[13748] 07 Jan 09:52:35.191 # fork operation complete
[13748] 07 Jan 09:52:35.192 * Background saving terminated with success

8.如果你嫌麻烦,可以把 redis 服务加了widows 系统服务,这样启动系统就直接运行,命令如下:

redis-server --service-install redis.windows.conf --loglevel verbose
#注意命令参数里面的 - 是两个

9.现在推荐一个 redis 教程地址: http://www.php.cn/redis/redis-php.html

Redis / 评 论 (0) / 热度 (100℃) / 2019-01-07 / 阅读全文  / MaWei

laravel路由总结

标 签:

1.laravel默认路由模板

Route::get('url','控制器@动作');

2.laravel支持路由方法

//get方法
Route::get('/','IndexController@index'); 
//post方法
Route::post('/','IndexController@index'); 
//支持所有方法
Route::any('/','IndexController@index'); 
//匹配多种方法
Route::match(['post','get'],'url','IndexController@index');
//其它的方法
Route::put('/','IndexController@index'); 
Route::delete('/','IndexController@index'); 
//使用上面两个方式提交数据时,需要在form表单加入如下的input参数
/**
    <form action="/" method="post">
        <input type="hidden" name="_method" value="put"/>
        <!-- laravel直接用如下方法 -->
        {{ method_field("put") }}
    </form>
 **/

3.laravel路由参数接收

//便用参数占位符的方式,然后控制里可以直接在动作函数形参传入
Route::get('/index/{id}','IndexController@index');//路由写法
//控制器里写法
function index($id){ echo $id;}

4.laravel路由分组,把相同的路由分成一组,简化路由,

//通常我们一个控制器里都有n多个动作,每次写路由都要写相同的,很麻烦,看起来也乱,例如
Route::get('/index','IndexController@index'); 
Route::get('/index/{id}','IndexController@info'); 
Route::get('/index/edit','IndexController@edit');
Route::get('/index/edit/{id}','IndexController@edit');
//这四个路由都在index控制器里,路由里都有 index,这样就可以分成一个组,写法如下
Route::group(['prefix'=>'index'],function(){
    Route::get('/','IndexController@index'); 
    Route::get('/{id}','IndexController@info');
    Route::get('/edit','IndexController@edit');
});
//可以省去 index

5.laravel 路由模型,我还不是很清楚,待补充

后台编程 / 评 论 (0) / 热度 (117℃) / 2018-10-29 / 阅读全文  / MaWei

laravel 框架路径获取函数

标 签: jquery

    1. laravel获取项目根目录函数:

base_path();

    2. laravel获取项目 app 目录函数:

app_path();

    3. laravel获取项目配置 config 目录函数:

config_path();

    4. laravel获取项目数据库 database 目录函数:

database_path();

    5. laravel获取项目入口 public 目录函数:

public_path();

    6. laravel获取项目里某个文件的绝对路径方法如下:

$path = base_path('vendor/bin');
$path = app_path('Http/Controllers/Controller.php');


PHP / 评 论 (0) / 热度 (60℃) / 2018-10-12 / 阅读全文  / MaWei

sublime php格式化代码 phpfmt

标 签: jquery

    我自己写的代码,代码格式化缩进都很好,很注意,但有时候有操蛋的是,看别人的代码,写的真的想死,

由于公司的电脑太差,没办法,只能转到用sublime编辑器写代码,用了一段时间,发现在真的爱上这个编辑器了,

这个编辑真的很好用,但格式化代码他自带的真的不行,所以在网上找了很多,发现一个不错的插件,下面直接上

    本文章介绍格式化php代码,用的插件是 phpfmt,安装方法很简单,

    1.ctrl+shift+p 输入 install package 回车 (如果你连包控制器都没有安装,请自行安装,不会自己在网上找教程)

    2.打开包安装器,在输入框里面输入 phpfmt,回车安装,

    3.安装好后会出现他的简短说明,说明你安装成功了,

    4.配置phpfmt,打开菜单Prferences->Package Settings->phpfmt->Settings user,点击打开,在里面输入如下配置:

{
    "format_on_save": false,
    "php_bin": "C:/wamp64/bin/php/php7.2.4/php.exe",
    "psr1": true,
    "psr1_naming": true,
    "psr2": true,
    "version": 1
}

    注意里面的php_bin路径设置成你的php路径

    5.然后你打开要格式化的文件,然后按ctrl+shift+p 输入phpfmt 选择 phpfmt:format now就可以了

或者按上面提示的快捷键 ctrl+F11也可以

    其它的具体配置请自行看他的文档,文档地址 

    github:https://github.com/nanch/phpfmt_stable

    本人英语水平有限,基本上没有怎么看懂,

    就按我上面的配置够用了

后台编程 / 评 论 (0) / 热度 (28℃) / 2018-10-11 / 阅读全文  / MaWei

scrapy 运行 no module named win32api

标 签: python

在用scrapy写爬虫时,使用命令:

scrapy shell http://doc.scrapy.org/en/latest/_static/selectors-sample1.html

时,报错如果下:

scrapy shell http://doc.scrapy.org/en/latest/_static/selectors-sample1.html
2018-08-30 09:34:39 [scrapy.utils.log] INFO: Scrapy 1.5.1 started (bot: scrapybot)
2018-08-30 09:34:39 [scrapy.utils.log] INFO: Versions: lxml 4.2.4.0, libxml2 2.9.5, cssselect 1.0.3, parsel 1.5.0, w3lib 1.19.0, Twisted 18.7.0, Python 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)], pyOpenSSL 18.0.0 (OpenSSL 1.1.0i  14 Aug 2018), cryptography 2.3.1, Platform Windows-10-10.0.17134-SP0
2018-08-30 09:34:39 [scrapy.crawler] INFO: Overridden settings: {'DUPEFILTER_CLASS': 'scrapy.dupefilters.BaseDupeFilter', 'LOGSTATS_INTERVAL': 0}
2018-08-30 09:34:39 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.corestats.CoreStats',
 'scrapy.extensions.telnet.TelnetConsole']
Traceback (most recent call last):
  File "c:\python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Python36\Scripts\scrapy.exe\__main__.py", line 9, in <module>
  File "c:\python36\lib\site-packages\scrapy\cmdline.py", line 150, in execute
    _run_print_help(parser, _run_command, cmd, args, opts)
  File "c:\python36\lib\site-packages\scrapy\cmdline.py", line 90, in _run_print_help
    func(*a, **kw)
  File "c:\python36\lib\site-packages\scrapy\cmdline.py", line 157, in _run_command
    cmd.run(args, opts)
  File "c:\python36\lib\site-packages\scrapy\commands\shell.py", line 67, in run
    crawler.engine = crawler._create_engine()
  File "c:\python36\lib\site-packages\scrapy\crawler.py", line 105, in _create_engine
    return ExecutionEngine(self, lambda _: self.stop())
  File "c:\python36\lib\site-packages\scrapy\core\engine.py", line 69, in __init__
    self.downloader = downloader_cls(crawler)
  File "c:\python36\lib\site-packages\scrapy\core\downloader\__init__.py", line 88, in __init__
    self.middleware = DownloaderMiddlewareManager.from_crawler(crawler)
  File "c:\python36\lib\site-packages\scrapy\middleware.py", line 58, in from_crawler
    return cls.from_settings(crawler.settings, crawler)
  File "c:\python36\lib\site-packages\scrapy\middleware.py", line 34, in from_settings
    mwcls = load_object(clspath)
  File "c:\python36\lib\site-packages\scrapy\utils\misc.py", line 44, in load_object
    mod = import_module(module)
  File "c:\python36\lib\importlib\__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 678, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "c:\python36\lib\site-packages\scrapy\downloadermiddlewares\retry.py", line 20, in <module>
    from twisted.web.client import ResponseFailed
  File "c:\python36\lib\site-packages\twisted\web\client.py", line 41, in <module>
    from twisted.internet.endpoints import HostnameEndpoint, wrapClientTLS
  File "c:\python36\lib\site-packages\twisted\internet\endpoints.py", line 41, in <module>
    from twisted.internet.stdio import StandardIO, PipeAddress
  File "c:\python36\lib\site-packages\twisted\internet\stdio.py", line 30, in <module>
    from twisted.internet import _win32stdio
  File "c:\python36\lib\site-packages\twisted\internet\_win32stdio.py", line 9, in <module>
    import win32api
ModuleNotFoundError: No module named 'win32api'

看错误就知道是因为没有win32api,所以下一个安装,应该就没有什么问题了。

安装文件名为 pywin32,安装的方法有两种,安装方法如下:

1.就是直接用pip安装,这个很方便,在linux或者window上都行,命令如下:

pip3 install pywin32

2.就是下载pywin32程序,然后安装就好了,下载地址如下

pywin32下载

进入页面后,选择版本,一直都选择最新的pywin32的版本,点击版本进去就,选择操作系统和python版本,下载安装

就好了

后台编程 / 评 论 (0) / 热度 (122℃) / 2018-08-30 / 阅读全文  / MaWei

sublime 自定义注释

标 签:

    使用sublime的时候,有没有在什么地方加几行代码,然后得标注一下什么时候改过的,谁改过的,所以要注释一下.

    如果每次手动写,很麻烦,有没有一种方法自动生成,肯定是有的.方法如下:

    1.首先得新建一个 snippert ,可以理解为注释模板吧,路径为菜单栏上的 tools->developer->new snippet,会打开一个新

页面,注意的是保存文件名要以 .sublime-snippet 的后缀才行, 里面有如下代码:

<snippet>
 <content><![CDATA[
Hello, ${1:this} is a ${2:snippet}.
]]></content>
 <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
 <!-- <tabTrigger>hello</tabTrigger> -->
 <!-- Optional: Set a scope to limit where the snippet will trigger -->
 <!-- <scope>source.python</scope> -->
</snippet>

    里面主要的配置有两项:

        CDATA[],这里面就是你的注释模板,

        <!-- <tabTrigger>hello</tabTrigger> --> 这项是触发的快捷键

    我的配置如下,也可以自己修改自己喜欢的:

<snippet>
 <content><![CDATA[
  \/*****@Start***@MaWei:${1:f7}*****${2}**********@Start*********\/
  \/*****@End*****@MaWei:${1:f7}*****${2}**********@End*******\/
]]></content>
 <!-- Optional: Set a tabTrigger to define how to trigger the snippet -->
 <tabTrigger>des</tabTrigger>
 <!-- Optional: Set a scope to limit where the snippet will trigger -->
 <!-- <scope>source.python</scope> -->
</snippet>

    复制的时候把反斜杠去了,在想要注释的地方输入des然后回车或者tab都行,就会生成这个注释模板了,然后按F7,生成当前时间

在生成时间这个地方,我参考了很多少地方,都没有找到很少的解决方法,网上都是这么写的,应该是自动生成的,

可不知道我就是没有办法自动生成,得按快捷键才行,如果有那个大神知道,可以告诉我一下,QQ:1123265518.

    2.生成时间的方法为新建一个sublime 的插件,在菜单栏上的 tools->developer->new plugin,在里面添加如下代码:

import datetime, getpass
import sublime, sublime_plugin
class AddDateTimeStampCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.run_command("insert_snippet", { "contents": "%s" %  datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") } )
class AddDateStampCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.run_command("insert_snippet", { "contents": "%s" %  datetime.datetime.now().strftime("%Y-%m-%d") } )
class AddTimeStampCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        self.view.run_command("insert_snippet", { "contents": "%s" %  datetime.datetime.now().strftime("%H:%M:%S") } )

然后点击保存,名字随便.但名字后缀为.py

    3.最后是添加快捷键,打开自定义快捷键配置, Preferences->key bludings,在里面添加如下:

{ "keys": ["f7"], "command": "add_date_time_stamp" },

 注意前面一条是否有,号结尾.

Python / 评 论 (0) / 热度 (167℃) / 2018-11-28 / 阅读全文  / MaWei

sublime 快捷键插入当前时间

标 签: wamp

    在使用sublime开发的时候,有时候要注释一下开发时间,用手写有点坑,所以就想怎么用快捷生成,费话不多说,方法如下:

    1.添加一个插件,在菜单栏选择, tools->developer->new plugin,然后会打开一个页面,在里面输入如下代码:(注意保存文件时,后缀名为.py)

import sublime
import sublime_plugin
import time
version_format_time = "%Y-%m-%d %H:%M:%S"
version_format_day = "%Y-%m-%d" 
version_pattern = "[0-9]{4}\-[0-9]{2}\-[0-9]{2}_[0-9]{2}\.[0-9]{2}\.[0-9]{2}"
class insert_datetimeCommand(sublime_plugin.TextCommand):
  def run(self, edit):
    sels = self.view.sel()
    for sel in sels:
      if not self.view.find_all(version_pattern):
        self.view.replace(edit, sel, time.strftime(version_format_time))
        return
      region = sublime.Region(0, self.view.size())
      results = self.view.find_all(version_pattern)
      for result in results:
        self.view.replace(edit, result, time.strftime(version_format_time))

class InsertDateCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        sel = self.view.sel();
        for s in sel:
            self.view.replace(edit, s, time.strftime(version_format_day))

    2.添加快捷键,也是在菜单栏选择, Preferences->key bludings,打开一个自定义快捷键,在里面的 [ ] 里面添加如下代码:

 { "keys": ["f5"], "command": "insert_datetime" },
 { "keys": ["f6"], "command": "insert_date" },

    要注意的是,如果里面有,添加在最尾行的时候,前面一行后面有没有,号,如果没有得加上,不然就报错了,

    这个设置的快捷键为 F5 ,F6,F5为时间到秒, F6为时间到天,如果需要改成最它快捷键,自己改.

Python / 评 论 (0) / 热度 (58℃) / 2018-07-20 / 阅读全文  / MaWei

laravel composer 安装

标 签:

    现在lavavel 一键下载安装包已经没有了,得git一堆东西自己打包,我自己搞了很久,没有搞定,没有什么文档

最后没有办法,只能用composer,但composer下载很慢,但composer请求地址改成中国就好了,下面就来说说composer

安装 lavavel 方法:

    1.第一步就是把你的php安装目录加入系统环境里面,如果不会,那自己百度了

    2.下载composer,可以下载安装包,但安装包安装composer后,下载 lavavel ,下载地址:

https://getcomposer.org/download/

在页面找到 Composer-Setup.exe ,或者 用命令行安装,页面里都有.但这两种方法我都试,结果项目下载到别的地方了,

路径不在你项目,如果是widown在你用户目录里

    C:\Users\MaWei\AppData\Roaming\Composer

 我找了很久,不知道怎么解决,只是把composer安装你的项目里,但这肯定不行的,如果有知道怎么解决可以告诉我的一下,QQ:1123265518

    3.所以我不推荐新手用上面 2 的方法,如果有大神可以告诉上面的方法解决办法,谢谢了,我后来用的方法也是在这个下载页面,在下面一点,

有个 manual download, 手动下载,找到 Latest Snapshot ,点击下载,下载的文件名是 compser.phar ,保存在你的网站根目录

    4.在你的网站根目录里面新建一个 composer.json 文件,里面写入如下的内容:

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=7.0.0",
        "laravel/framework": "5.5.*"
    },
    "config": {
        "preferred-install": "dist"
    },
    "repositories": {
        "packagist": {
            "type": "composer",
            "url": "https://packagist.phpcomposer.com"
        }
    }
}

上面的配置项我就不一一说明了,看key就明白了.

    5.现在就可以直接创建lavavel项目,命令如下:

php composer.phar create-project laravel/laravel 项目名 --prefer-dist

    6.完成后就可以看到你的根目录创建一个项目,名字就是刚刚创的项目名

    7.注意的是,php的路径要加入系统变量里,加入进去后就可以输入命令

php -v

可以看到php的版本,注意的事,lavavel 5.5的版本要php7版本以上

PHP / 评 论 (0) / 热度 (135℃) / 2018-04-23 / 阅读全文  / MaWei