PHP下安装Ldap查询扩展
Php/Js/Shell/Go jack 2017-6-22 23:42
php安装模块见http://fffo.blog.163.com/blog/static/211913068201401464238334/
1、官网下载
wget http://prdownloads.sourceforge.net/lam/ldap-account-manager-4.3.tar.bz2?download
2、解压
tar -xjf ldap-account-manager-4.3.tar.bz2
3、直接移动到apache 根目录
mv ldap-account-manager-4.3 /usr/local/apache/htdocs/lam
4、给它可以访问的权限
chmod 777 -R /usr/local/apache/htdocs/lam
5、进入配置目录
cd /usr/local/apache/htdocs/lam/config
6、创建主参数文件
cp config.cfg_sample config.cfg
7、创建连接ldap服务器参数文件
cp lam.conf_sample lam.conf
vim lam.conf
修改 所有的dc=1v,dc=cn
8、web访问
http://203.195.187.200/lam/templates/login.php
上面的模式是只限管理员登录模式。现在切换到用户登录模式
点击LAM配置——>编辑服务器配置文件——>默认密码是lam(可修改)——>通用设置——>安全设定
From:http://blog.csdn.net/u012461550/article/details/42608781
我的是在:
/usr/local/lam/etc/unix.conf
1、官网下载
wget http://prdownloads.sourceforge.net/lam/ldap-account-manager-4.3.tar.bz2?download
2、解压
tar -xjf ldap-account-manager-4.3.tar.bz2
3、直接移动到apache 根目录
mv ldap-account-manager-4.3 /usr/local/apache/htdocs/lam
4、给它可以访问的权限
chmod 777 -R /usr/local/apache/htdocs/lam
5、进入配置目录
cd /usr/local/apache/htdocs/lam/config
6、创建主参数文件
cp config.cfg_sample config.cfg
7、创建连接ldap服务器参数文件
cp lam.conf_sample lam.conf
vim lam.conf
修改 所有的dc=1v,dc=cn
8、web访问
http://203.195.187.200/lam/templates/login.php
上面的模式是只限管理员登录模式。现在切换到用户登录模式
点击LAM配置——>编辑服务器配置文件——>默认密码是lam(可修改)——>通用设置——>安全设定
From:http://blog.csdn.net/u012461550/article/details/42608781
我的是在:
/usr/local/lam/etc/unix.conf
[实践OK]PHP 5.3版本的Mysqlli驱动没升级前得安装Mysql才能编译,而后面的已经不建议使用它了, 而建议使用mysqlnd。
Php/Js/Shell/Go jack 2017-6-22 23:40
一、旧版本的PHP(php5.3.27)要装Mysql之后才能装Mysql(mysqli)扩展?编译选项有这个:
--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config
传统的安装php的方式中,我们在编译PHP时,一般需要指定以下几项:
--with-mysql=/usr/local/mysql
--with-pdo-mysql=/usr/local/mysql
这实际上就是使用了mysql官方自带的libmysql驱动, 这是比较老的驱动, PHP 5.3开始已经不建议使用它了, 而建议使用mysqlnd.
以上是摘录,更多查看:http://blog.163.com/yxba_02/blog/static/187557620160401018458/
二、PHP7啥的都不用指定Mysql的位置,直接就能编译通过的呀~
PHP7这样的:
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
现在系统存在历史问题,没法一时半会升级PHP7了,还在用 php5.3.27上混,编译选项有指定Mysql路径的。
ldd php
发现:
libmysqlclient.so.18 => /usr/lib64/libmysqlclient.so.18 (0x00002b5b5dec7000)
也就是说PHP5.3.7最后还是编译成自己的LIb了,没有Mysql一样能跑,这TM是个问题,装个PHP还得装上Mysql,这个低版本的PHP还得装Mysql服务才行哟。
总之,Mysql和PHP在低版本有了较强的捆绑,而新的PHP7采用Mysqlnd(MySQL Native Driver),摆脱了这一依赖,更简单,更高效。php高版本不再使用mysql_connect()来连接数据库。
--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config
传统的安装php的方式中,我们在编译PHP时,一般需要指定以下几项:
--with-mysql=/usr/local/mysql
--with-pdo-mysql=/usr/local/mysql
这实际上就是使用了mysql官方自带的libmysql驱动, 这是比较老的驱动, PHP 5.3开始已经不建议使用它了, 而建议使用mysqlnd.
以上是摘录,更多查看:http://blog.163.com/yxba_02/blog/static/187557620160401018458/
二、PHP7啥的都不用指定Mysql的位置,直接就能编译通过的呀~
PHP7这样的:
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
现在系统存在历史问题,没法一时半会升级PHP7了,还在用 php5.3.27上混,编译选项有指定Mysql路径的。
ldd php
发现:
libmysqlclient.so.18 => /usr/lib64/libmysqlclient.so.18 (0x00002b5b5dec7000)
也就是说PHP5.3.7最后还是编译成自己的LIb了,没有Mysql一样能跑,这TM是个问题,装个PHP还得装上Mysql,这个低版本的PHP还得装Mysql服务才行哟。
总之,Mysql和PHP在低版本有了较强的捆绑,而新的PHP7采用Mysqlnd(MySQL Native Driver),摆脱了这一依赖,更简单,更高效。php高版本不再使用mysql_connect()来连接数据库。
[登录安全]ENCRYPT_METHOD MD5和ENCRYPT_METHOD SHA512的区别。
Unix/LinuxC技术 jack 2017-6-22 23:32
背景:一般来讲Linux对明文登录用户的密码在CentOS里有多种,但是MD5长度在36位以下。容量被破解,正向算法、碰撞等,特别是那个万能Wifi钥匙,我去。CentOS5和CentOS6的想法是更安全,但为了兼容统一管理密码Shadow,批量刷一样的,往往会用MD5这种方式,但是被破解后也是很容易给被攻下的一种弱的加密验证方式。
当用户发出useradd命令时,useradd命令读取/ etc / default / useradd和/etc/login.defs并确定useradd的默认值。 要显示/ etc / defaults / useradd的值,请参阅显示useradd的默认值
#使用MD5或DES加密密码? 红帽默认使用MD5。
MD5_CRYPT_ENAB是的
ENCRYPT_METHOD MD5
当用户发出useradd命令时,useradd命令读取/ etc / default / useradd和/etc/login.defs并确定useradd的默认值。 要显示/ etc / defaults / useradd的值,请参阅显示useradd的默认值
#使用MD5或DES加密密码? 红帽默认使用MD5。
MD5_CRYPT_ENAB是的
ENCRYPT_METHOD MD5
[实践OK]linux系统 su切换用户失败情况,/etc/passwd 里面的shell是 :/bin/false导致没法sudo 成功。
Unix/LinuxC技术 jack 2017-1-20 16:25
背景:原来是因为Jenkins的组不对,再把组修正了下,再加上chmod a+s /bin/su ,后来发现是因为/etc/passwd 里面的shell是 :/bin/false导致没法sudo 成功。
su jenkins
id
uid=0(root) gid=0(root) 组=0(root)
试了下Su到其它用户可以,于是查了一下 vi /etc/passwd :
jenkins:x:1012:1010:Jenkins Continuous Integration Server:/data/jenkins:/bin/false
原来是这儿/bin/false,不是su的问题:
jenkins:x:497:601:Jenkins Continuous Integration Server:/data/jenkins:/bin/bash
于是就好了:
[root@iZ2zehnf4lbq2wf83bmzk1Z ~]# su jenkins
[jenkins@iZ2zehnf4lbq2wf83bmzk1Z root]$ id
uid=1012(jenkins) gid=1010(jenkins) 组=1010(jenkins)
==================================================
[root@iZ2zehnf4lbq2wf83bmzk1Z ~]# su jenkins
[root@iZ2zehnf4lbq2wf83bmzk1Z ~]# id
uid=0(root) gid=0(root) 组=0(root)
[root@iZ2zehnf4lbq2wf83bmzk1Z ~]# whoami
root
[root@iZ2zehnf4lbq2wf83bmzk1Z ~]# id jenkins
uid=984(jenkins) gid=990(jenkins) 组=990(jenkins)
========================================
原因1
/bin/su文件没有s位权限
chmod a+s /bin/su
来自:http://blog.itpub.net/26432034/viewspace-1688391/
解决办法
感谢csdn用户jeecg-scott分享的博文《su 切换,提示:“密码不正确”》以下是连接
http://blog.csdn.net/zhangdaiscott/article/details/18666471
step1
检查/etc目录下passwd的权限
[root@dev /]# ll /etc/passwd
-rw-r--r--. 1 root root 1975 5月 27 06:04 /etc/passwd
如果普通用户不能读请改成644权限
[root@dev /]# chmod 644 /etc/passwd
step2
检查/bin/su文件是否有s位权限
[root@dev ~]# ll /bin/su
-rwxrwxrwx. 1 root root 34904 10月 17 2013 /bin/su
如果不存在则添加上
[root@dev /]# chmod a+s /bin/su
[root@dev /]# ll /bin/su
-rwsrwsrwx. 1 root root 34904 10月 17 2013 /bin/su
step3
测试成功否
[oracle@dev ~]$ su - root
密码:
[root@dev ~]#
su jenkins
id
uid=0(root) gid=0(root) 组=0(root)
试了下Su到其它用户可以,于是查了一下 vi /etc/passwd :
jenkins:x:1012:1010:Jenkins Continuous Integration Server:/data/jenkins:/bin/false
原来是这儿/bin/false,不是su的问题:
jenkins:x:497:601:Jenkins Continuous Integration Server:/data/jenkins:/bin/bash
于是就好了:
[root@iZ2zehnf4lbq2wf83bmzk1Z ~]# su jenkins
[jenkins@iZ2zehnf4lbq2wf83bmzk1Z root]$ id
uid=1012(jenkins) gid=1010(jenkins) 组=1010(jenkins)
==================================================
[root@iZ2zehnf4lbq2wf83bmzk1Z ~]# su jenkins
[root@iZ2zehnf4lbq2wf83bmzk1Z ~]# id
uid=0(root) gid=0(root) 组=0(root)
[root@iZ2zehnf4lbq2wf83bmzk1Z ~]# whoami
root
[root@iZ2zehnf4lbq2wf83bmzk1Z ~]# id jenkins
uid=984(jenkins) gid=990(jenkins) 组=990(jenkins)
========================================
原因1
/bin/su文件没有s位权限
chmod a+s /bin/su
来自:http://blog.itpub.net/26432034/viewspace-1688391/
解决办法
感谢csdn用户jeecg-scott分享的博文《su 切换,提示:“密码不正确”》以下是连接
http://blog.csdn.net/zhangdaiscott/article/details/18666471
step1
检查/etc目录下passwd的权限
[root@dev /]# ll /etc/passwd
-rw-r--r--. 1 root root 1975 5月 27 06:04 /etc/passwd
如果普通用户不能读请改成644权限
[root@dev /]# chmod 644 /etc/passwd
step2
检查/bin/su文件是否有s位权限
[root@dev ~]# ll /bin/su
-rwxrwxrwx. 1 root root 34904 10月 17 2013 /bin/su
如果不存在则添加上
[root@dev /]# chmod a+s /bin/su
[root@dev /]# ll /bin/su
-rwsrwsrwx. 1 root root 34904 10月 17 2013 /bin/su
step3
测试成功否
[oracle@dev ~]$ su - root
密码:
[root@dev ~]#
PHP7框架之Lumen之Hello World,PHP7下的Lumen (5.5.*)框架之Hello World,如何调用Models下面的数据层,触目了解其MVC思想和取数据成功实践于基于其领悟,学下先进。
Php/Js/Shell/Go jack 2017-1-13 15:20
背景:听说Lumen起家是以一个叫av的框架,larvael。以Auth2.0起步,Lumen是精简版本,于是想了解一下。发现居然边TM路由就卡住了,Fuck,不光是我老外也有这个问题,都没有解决,主要是一个Nginx的转写问题,这块在Lumen的文档里写的很垃圾,我都不知这些人是怎么写文档的,有用Apache,有Nginx的就不能写细一点么,说一下原理啥的,关键是Nginx配置文件里面的:location /里面的重写。
From:http://blog.csdn.net/wowkk/article/details/52104689
Lumen 5.5.*版本的Lumen,目录:lumen-clear-edition
composer create-project laravel/lumen lumen-clear-edition --prefer-dist "5.5.*" # proc_open,
vi ms/survey/bootstrap/app.php
require __DIR__.'/../config/providers.php'
vi ms/survey/config/providers.php
<?php
$app->register(Common\Providers\RedisServiceProvider::class);
$app->register(Common\Providers\MysqlServiceProvider::class);
$app->register(Common\Providers\KafkaServiceProvider::class);
$app->register(Common\Providers\EventServiceProvider::class);
$app->register(Common\Providers\QueueServiceProvider::class);
注册的文件在:
ls ./lumen-clear-edition/common/Providers
EventServiceProvider.php MysqlServiceProvider.php RedisServiceProvider.php
启动方法:
启动方法#服务提供者中注册一个视图 composer 则应该在 boot 方法中完成。此方法会在所有其它的服务提供者被注册后才被调用,意味着你能访问已经被框架注册的所有其它服务:https://lumen.laravel-china.org/docs/5.3/providers,ServiceProvider类,和绑定easy_kafka类:
lumen-clear-edition/common/Providers/KafkaServiceProvider.php
vi lumen-clear-edition/common/Service/Kafka/Kafka.php #自己写这个类的方法。
绑定的easy_kafka在这儿:
lumen-clear-edition/common/Facades/Kafka.php
ms/survey/app/Http/Controllers/Api/V1/ActivityController.php #路由@./ms/survey/routes/web.php
$router->group(['namespace'=>'Api\V1'], function () use ($router) {
$router->post('activity/form', ['uses' => 'ActivityController@form']);
ms/survey/app/Helpers/Client/SurveyClient.php
类的加载,common文件夹位置:
"autoload": {
"psr-4": {
"App\\": "app/",
"Common\\": "common/"
}
},
#composer dump-autoload --optimize
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Generating optimized autoload files
生成文件在这儿(挪动一下文件放到新目录,建议重新运行一下这个:composer dump-autoload --optimize,再就是如果有PHP的OPcache得重新启动一下PHP-FPM或关闭掉Opcache,/usr/local/php/etc/php.d/opcache.ini ,opcache.enable=0):
./lumen-clear-edition/vendor/composer/autoload_psr4.php: 'Common\\' => array($baseDir . '/common'),
More:
#find ./ -mtime 0 -type f
./composer.json <== "Common\\": "common/"
./app/Http/Controllers/Api/V1/ActivityController.php
./app/Helpers/Client/SurveyClient.php
./common/Providers/UserServiceProvider.php
./common/Facades/User.php
./common/Services/User/User.php
./config/providers.php
composer dump-autoload --optimize改动的:
./vendor/autoload.php ==》return ComposerAutoloaderInit7d1969d6b0c0a5e119f2b7e0932178e2::getLoader();
./vendor/composer/autoload_psr4.php
./vendor/composer/autoload_static.php
./vendor/composer/autoload_classmap.php
./vendor/composer/autoload_files.php
./vendor/composer/ClassLoader.php
./vendor/composer/autoload_namespaces.php
./vendor/composer/autoload_real.php
访问URL: http://47.93.207.136/activity/survey
最后,这个Provider的类如何使用参考,但写得不是很明白,最新版本的和实际使用并不定一模一样的:http://www.cnblogs.com/cxscode/p/7569856.html
路由:https://lumen.laravel.com/docs/5.4
中文文档:http://laravelacademy.org/laravel-docs-5_4
5.4这个路由,老外写得很简单,这帮人可能是想你去看他的代码吧,有很多人在问:
http://www.thinksaas.cn/ask/question/22000/
class KafkaServiceProvider extends ServiceProvider{
return new \Common\Service\Kafka\Kafka(); #lumen-clear-edition/common/Service/Kafka/Kafka.php
lumen-clear-edition/common/Service/Kafka/Kafka.php 里:
做微服务:/usr/local/nginx/conf/vhosts/ms.conf
server_name 10.70.**.142;
root /data/www/ms/;
rewrite ^/(survey)/.*$ /$1/public/index.php last;
http://10.70.33.140/survey/public/index.php
/data/www/ms/survey/public/index.php
路由:
/data/www/ms/survey/routes/web.php
一)$app->group(['prefix' => 'private','namespace'=>'Api\V1'], function () use ($app) {
$app->get('survey/list', ['uses' => 'SurveyController@list']);
http://47.93.207.136/private/survey/list
app/Http/Controllers/Api/V1/SurveyController.php
二)$app->group(['namespace'=>'Api\V1'], function () use ($app) {
$app->get('activity/survey', ['uses' => 'ActivityController@survey']);
http://47.93.207.136/activity/survey
app/Http/Controllers/Api/V1/ActivityController.php 里有一行:
$client = new SurveyClient();
./app/Helpers/Client/SurveyClient.php:class SurveyClient{
Lumen (5.5.2) (Laravel Components 5.5.*),路由的写法有点不一样:
$router->group(['prefix' => 'private','namespace'=>'Api\V1'], function () use ($router) {
$router->get('survey/list', ['uses' => 'SurveyController@list']);
$router->group(['namespace'=>'Api\V1'], function () use ($router) {
$router->get('activity/survey', ['uses' => 'ActivityController@survey']);
调用层级及配置文件的一个情况,二是如何引入框架目录的入口:
./app/Http/Controllers/Api/V1/SurveyController.php:class SurveyController extends Controller{
/**
* 删除互动
*/
public function delete(Request $request){
$iid = intval($request->input('iid'));
$res = Survey::deleteSurvey($iid);#调用Models
return $this->out($res?1:0,$res?"success":"failed");
}
调用Models位置:
./app/Models/Survey.php: public static function deleteSurvey($iid){
配置文件:
/data/www/ms/survey/config_production/database.php
/data/www/ms/survey/config_production/kafka.php
/data/www/ms/survey/config_production/redis.php
vi /data/htdocs/lumen.levoo.com/bootstrap/app.php #引入框架目录
======================================================================================
Lumen 中可以使用的 Facades,查看源代码,可用清单如下(https://segmentfault.com/a/1190000002902055):
/survey/bootstrap/app.php:$app->withFacades(); $app->withFacades();
./lumen-clear-edition/vendor/laravel/lumen-framework/src/Application.php: public function withFacades($aliases = true, $userAliases = [])
./vendor/laravel/lumen-framework/src/Application.php
public function withAliases($userAliases = [])
if (! static::$aliasesRegistered) {
static::$aliasesRegistered = true;
$merged = array_merge($defaults, $userAliases);
foreach ($merged as $original => $alias) {
class_alias($original, $alias);
}
}
==========================================================================================
/usr/local/composer/composer.phar global require "laravel/lumen-installer"
https://lumen.laravel.com/docs/5.4#server-requirements 下面的:
chmod a+x /root/.config/composer/vendor/laravel/lumen-installer/lumen
/root/.config/composer/vendor/bin/lumen new lumen.levoo.com
/data/htdocs/lumen.levoo.com/blog/routes/web.php
你可以将所有路由都定义在routes/web.php中。最基本的 Lumen 路由接收:
http://laravelacademy.org/post/6337.html
$app->group(['prefix'=>'test'],function($app){
$app->get("/index",["uses" => "TestController@index"]);
});
【lumen】基础点记录使用:blog.csdn.net/imdingding/article/details/48679359
app/Http/routes.php中进行路由配置可以使用如下路由组的形式,在路由上lumen和laravel有一些区别
$app->group(['prefix' => 'scrollnews','namespace' => 'App\Http\Controllers'],function($app) {
$app->get('/','NewsController@showall');
$app->get('/{time}_{newpage}.htm','NewsController@showtime');
$app->get('/{newpage}.htm', 'NewsController@show');
});
http://123.57.252.183/test/index
hello Lumen (5.4.5) (Laravel Components 5.4.*)
/data/htdocs/lumen.levoo.com/app/Http/Controllers/TestController.php
<?php
namespace App\Http\Controllers;
use App\user; //新增部分
use Laravel\Lumen\Routing\Controller as BaseController;
use Illuminate\Http\Request;
class TestController extends BaseController
{
//直接传人sql方式操作数据库
function index(Request $request){
echo "hello Lumen (5.4.5) (Laravel Components 5.4.*)。";die;
return User::all();
}
}
以上实践来源及变通参看了:http://blog.5ibc.net/p/87952.html
PHP message: PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/data/htdocs/lumen.levoo.com/storage/logs/lumen.log" could not be opened: failed to open stream: Permission denied in /data/htdocs/lumen.levoo.com/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107
mkdir
chmod -R 755 /data/htdocs/lumen.levoo.com/storage
chown -R www /data/htdocs/lumen.levoo.com/storage
Controller类的写法:https://segmentfault.com/q/1010000002727820
/data/htdocs/lumen.levoo.com/blog/app/Http/Controllers/AccountController.php
关于数据库配置文件:
默认情况下, Lumen 使用单一的 .env 文件来配置你的应用, 然而, 你也可以使用 Laravel 风格 的配置方法.
/data/htdocs/lumen.levoo.com/vendor/laravel/lumen-framework/config/database.php
文件夹下对应的配置文件复制到根目录下的 config 文件里面就行.
https://lumen.laravel-china.org/docs/5.3/configuration#configuration-files
Redis:
CACHE_DRIVER=file
SESSION_DRIVER=redis
QUEUE_DRIVER=sync
REDIS_HOST=192.168.1.248
REDIS_PASSWORD=null
REDIS_PORT=6379
今天在部署服务器的时候,使用composer来安装依赖。遇到了如下情况,这块出错好像和Redis配置有关,得在.env里配置好并运行起来。
The Process class relies on proc_open, which is not available on your PHP installation.
[ErrorException]
proc_get_status() has been disabled for security reasons
开始的时候,我有些不知所措,于是冷静下来思考一番,然后goolge了一下
解决方法:
在php.ini中,找到disable_functions选项,看看后面是否有proc_open函数被禁用了,如果有的话,去掉即可
其实如果php的文档熟悉的话,你应该马上就能知道proc_open实际上是一个函数,是php用来和shell交互的函数,一般这种可以直接作用于操作系统的函数是非常不安全的,对于这种不安全的函数,总是要做一些措施来进行保护
php artisan make:migration create_table_cars --create=cars
php artisan make:migration create_table_cars --create=cars
Created Migration: 2017_03_04_160644_create_table_cars
/data/htdocs/lumen.levoo.com/database/migrations/2017_03_04_160644_create_table_cars.php
public function up()
{
Schema::create('cars', function (Blueprint $table) {
$table->increments('id');
$table->string('make');
$table->string('model');
$table->string('year');
$table->timestamps();
});
}
php artisan migrate
Migrated: 2017_03_04_161708_create_table_cars
migrations记录历史 /car 两个表:
id int(10) UNSIGNED
make varchar(255)
model varchar(255)
year varchar(255)
create d_attimestamp
问题实践来源:http://www.cnblogs.com/crisenchou/p/6237781.html
打开方法来自:http://www.codesec.net/view/497671.html?winzoom=1
Model这块和Controll层的配置:
1)Controll层, /data/htdocs/lumen.levoo.com/app/Http/Controllers/TestController.php
<?php
namespace App\Http\Controllers;
use App\Models\Information;
use App\Models\Collection;
//use App\User; //新增部分APP目录下
use App\Models\User; //App\Models\User目录下
use Laravel\Lumen\Routing\Controller as BaseController;
use Illuminate\Http\Request;
class TestController extends BaseController
{
//直接传人sql方式操作数据库
function index(Request $request){
/*
$UserModel = new User();
$result = $User::all(); //这样也成
$result2 = $UserModel::all2(); //这样也成
*/
$result = User::all();
$result2 = User::all2();//这个在Model自定义的all2也能被调用输出结果
print_r($result);
echo "<hr>";
print_r($result2);
}
}
2)Model层:/data/htdocs/lumen.levoo.com/app/Models/User.php
<?php
//namespace App; //这个得注释掉,容易和App/User.php发生错误引用。
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
//默认操作数据库的users表,需要定制的话请看文档,下面有自己的配置。
class User extends Model
{
/**
* The connection name for the model.
*
* @var string
*/
protected $connection = 'mysql';
/**
* 表名
*
* @var string
*/
protected $table = 'levoo_sns_user'; //指定操作表名
protected $primaryKey = "id"; //指定主键
public $timestamps = false;
protected $dateFormat = 'U';
static public function all2(){
$User = User::all();
return $User;
}
}
=================MVC模板学习=============================
/data/htdocs/lumen.levoo.com/app/Http/Controllers/TestController.php
<?php
namespace App\Http\Controllers;
use App\Models\Information;
use App\Models\Collection;
//use App\User; //新增部分APP目录下
use App\Models\User; //App\Models\User目录下
use Laravel\Lumen\Routing\Controller as BaseController;
use Illuminate\Http\Request;
class TestController extends BaseController
{
//直接传人sql方式操作数据库
function index(Request $request){
/*
$UserModel = new User();
$result = $User::all(); //这样也成
$result2 = $UserModel::all2(); //这样也成
*/
$result = User::all();
//$result2 = User::all2();//这个在Model自定义的all2也能被调用输出结果
/*
print_r($result);
echo "<hr>";
print_r($result2);
*/
//view()->exists('user');
return view('test', ['name' => 'jackX','results' => $result]);
}
}
vi /data/htdocs/lumen.levoo.com/resources/views/test.blade.php
<!-- 该视图存放 resources/views/greeting.php -->
<html>
<body>
<h1>Hello, {{ $name }}</h1>
<h1>Hello, {{ $name2 or 'Default' }}</h1>
<h1>Hello, {!! $name !!}</h1>
<h1>Array, {{ $results}}</h1>
<h1>Array, {!! $results !!}</h1>
Blade for each:<br>
<h1>
@foreach ($results as $user)
<ul>
<li>This is user {{ $user->id }}</li>
<li>This is user {{ $user->mobile }}</li>
<li>This is user {{ $user->fansmobile }}</li>
<li>This is user {{ $user->followedTime }}</li>
</ul>
@endforeach
</h1>
<h1>
@foreach ($results as $user)
<ul>
@if ($user->id == 1)
用户Id=1,标识一下:
@endif
<li>This is user {{ $user->id }}</li>
<li>This is user {{ $user->mobile }}</li>
<li>This is user {{ $user->fansmobile }}</li>
<li>This is user {{ $user->followedTime }}</li>
</ul>
@endforeach
</h1>
<h1>只显示id=1的区块:</h1>
<h1>
@foreach ($results as $user)
<ul>
@continue($user->id == 2)
<li>This is user {{ $user->id }}</li>
<li>This is user {{ $user->mobile }}</li>
<li>This is user {{ $user->fansmobile }}</li>
<li>This is user {{ $user->followedTime }}</li>
</ul>
@break($user->id == 1)
@endforeach
</h1>
</body>
</html>
模板输出:http://123.57.252.183/test/index
Hello, jackX
Hello, Default
Hello, jackX
Array, [{"id":1,"mobile":"1881**65108","fansmobile":"18810322234","followedTime":1211212121},{"id":2,"mobile":"1881**65108","fansmobile":"18810322232","followedTime":121212}]
Array, [{"id":1,"mobile":"1881**65108","fansmobile":"18810322234","followedTime":1211212121},{"id":2,"mobile":"1881**65108","fansmobile":"18810322232","followedTime":121212}]
Blade for each:
This is user 1
This is user 1881**65108
This is user 18810322234
This is user 1211212121
This is user 2
This is user 1881**65108
This is user 18810322232
This is user 121212
用户Id=1,标识一下:
This is user 1
This is user 1881**65108
This is user 18810322234
This is user 1211212121
This is user 2
This is user 1881**65108
This is user 18810322232
This is user 121212
只显示id=1的区块:
This is user 1
This is user 1881**65108
This is user 18810322234
This is user 1211212121
这个叫Blade的模板引擎解析成PHP的,也就是相当于没有啥大的损耗,如果它的算法还算先进的前提下,位置在:
/data/htdocs/lumen.levoo.com/storage/framework/views/9e3b647aebb6a248d1ae42408e87c3fc7f5bc520.php
为什么这么说呢,如下,我在想为何要搞成这样,PHP裸写不也一样么,像Ci框架啥的,思考思考,这样也算是能模板和程序分离罢:
<h1>只显示id=1的区块:</h1>
<h1>
<?php $__currentLoopData = $results; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $user): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<ul>
<?php if($user->id == 2) continue; ?>
<li>This is user <?php echo e($user->id); ?></li>
<li>This is user <?php echo e($user->mobile); ?></li>
<li>This is user <?php echo e($user->fansmobile); ?></li>
<li>This is user <?php echo e($user->followedTime); ?></li>
</ul>
<?php if($user->id == 1) break; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
</h1>
主要是对这个模板有一个大体理解,和Smarty啥的有一个初步了解,参考自:
http://laravelacademy.org/post/6780.html
======================================================================
Nginx配置文件:
server
{
listen 80 default_server;
server_name 101.200.189.210 lumen.levoo.com;
index index.html index.htm index.php;
root /data/htdocs/lumen.levoo.com/blog/public;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
location ~ .*\.(php|php5)?$
{
fastcgi_pass unix:/dev/shm/php-fcgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
#if (!-f $request_filename){
# rewrite ^/(.+)$ /index.php?s=$1 last;
# break;
#}
}
access_log /data/logs/nginx/access_lumen_levoo.log;
}
上面location / {里被注释掉的也成,只是优雅度不够,这块好像手册有说明,我当时把 try_files $uri $uri/ /index.php?$query_string;放到location ~ .*\.(php|php5)?$ 里了,发现不对。
http://123.57.252.183/foo
Hello World
老外:
http://stackoverflow.com/questions/32281294/lumen-simple-route-request-doesnt-work
老外也有这个问题:
http://laravel.io/forum/05-08-2014-nginx-laravel-routing-shows-404?page=1
主从数据库配置(多台读库配置):
http://blog.sina.com.cn/s/blog_9bbafb790102win1.html
基于Lumen搭建一个OAUTH2认证的API框架:
http://www.bibihub.com/php/lumen-mobile-api-oauth-2-authentication/
========DB学习=========
基本使用
注意:如果你想要使用DB门面,应该取消bootstrap/app.php文件中$app->withFacades()调用前的注释
vi bootstrap/app.php
下面这个需要门面:
$app->get('/foo', function () use ($app) {
$results = app('db')->select("SELECT * FROM levoo_sns_user");
print_r($results);
$results = DB::select("SELECT * FROM levoo_sns_user");//这个需要门面
print_r($results);
return 'Hello World';
});
一些报错的日志:SQLSTATE[HY000] [2002] Connection refused
grep: ./survey/config_production/config_production: Too many levels of symbolic links
./survey/config_production/app.php: 'lumen_log_path'=>'/data/logs/lumen/survey.log', //框架日志
grep: ./survey/config/config_production: Too many levels of symbolic links
./survey/config/app.php: 'lumen_log_path'=>'/data/logs/lumen/survey.log', //框架日志
tail -f survey.log
Next Illuminate\Database\QueryException: SQLSTATE[HY000] [2002] Connection refused (SQL: select count(*) as aggregate from `survey` where `type` = 0 and `user` = 271 and `state` = 0) in /data/www/ms/lumen-clear-edition/vendor/illuminate/database/Connection.php:664
From:http://blog.csdn.net/wowkk/article/details/52104689
Lumen 5.5.*版本的Lumen,目录:lumen-clear-edition
composer create-project laravel/lumen lumen-clear-edition --prefer-dist "5.5.*" # proc_open,
vi ms/survey/bootstrap/app.php
require __DIR__.'/../config/providers.php'
vi ms/survey/config/providers.php
<?php
$app->register(Common\Providers\RedisServiceProvider::class);
$app->register(Common\Providers\MysqlServiceProvider::class);
$app->register(Common\Providers\KafkaServiceProvider::class);
$app->register(Common\Providers\EventServiceProvider::class);
$app->register(Common\Providers\QueueServiceProvider::class);
注册的文件在:
ls ./lumen-clear-edition/common/Providers
EventServiceProvider.php MysqlServiceProvider.php RedisServiceProvider.php
启动方法:
启动方法#服务提供者中注册一个视图 composer 则应该在 boot 方法中完成。此方法会在所有其它的服务提供者被注册后才被调用,意味着你能访问已经被框架注册的所有其它服务:https://lumen.laravel-china.org/docs/5.3/providers,ServiceProvider类,和绑定easy_kafka类:
lumen-clear-edition/common/Providers/KafkaServiceProvider.php
vi lumen-clear-edition/common/Service/Kafka/Kafka.php #自己写这个类的方法。
绑定的easy_kafka在这儿:
lumen-clear-edition/common/Facades/Kafka.php
ms/survey/app/Http/Controllers/Api/V1/ActivityController.php #路由@./ms/survey/routes/web.php
$router->group(['namespace'=>'Api\V1'], function () use ($router) {
$router->post('activity/form', ['uses' => 'ActivityController@form']);
ms/survey/app/Helpers/Client/SurveyClient.php
类的加载,common文件夹位置:
"autoload": {
"psr-4": {
"App\\": "app/",
"Common\\": "common/"
}
},
#composer dump-autoload --optimize
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Generating optimized autoload files
生成文件在这儿(挪动一下文件放到新目录,建议重新运行一下这个:composer dump-autoload --optimize,再就是如果有PHP的OPcache得重新启动一下PHP-FPM或关闭掉Opcache,/usr/local/php/etc/php.d/opcache.ini ,opcache.enable=0):
./lumen-clear-edition/vendor/composer/autoload_psr4.php: 'Common\\' => array($baseDir . '/common'),
More:
#find ./ -mtime 0 -type f
./composer.json <== "Common\\": "common/"
./app/Http/Controllers/Api/V1/ActivityController.php
./app/Helpers/Client/SurveyClient.php
./common/Providers/UserServiceProvider.php
./common/Facades/User.php
./common/Services/User/User.php
./config/providers.php
composer dump-autoload --optimize改动的:
./vendor/autoload.php ==》return ComposerAutoloaderInit7d1969d6b0c0a5e119f2b7e0932178e2::getLoader();
./vendor/composer/autoload_psr4.php
./vendor/composer/autoload_static.php
./vendor/composer/autoload_classmap.php
./vendor/composer/autoload_files.php
./vendor/composer/ClassLoader.php
./vendor/composer/autoload_namespaces.php
./vendor/composer/autoload_real.php
访问URL: http://47.93.207.136/activity/survey
最后,这个Provider的类如何使用参考,但写得不是很明白,最新版本的和实际使用并不定一模一样的:http://www.cnblogs.com/cxscode/p/7569856.html
路由:https://lumen.laravel.com/docs/5.4
中文文档:http://laravelacademy.org/laravel-docs-5_4
5.4这个路由,老外写得很简单,这帮人可能是想你去看他的代码吧,有很多人在问:
http://www.thinksaas.cn/ask/question/22000/
class KafkaServiceProvider extends ServiceProvider{
return new \Common\Service\Kafka\Kafka(); #lumen-clear-edition/common/Service/Kafka/Kafka.php
lumen-clear-edition/common/Service/Kafka/Kafka.php 里:
做微服务:/usr/local/nginx/conf/vhosts/ms.conf
server_name 10.70.**.142;
root /data/www/ms/;
rewrite ^/(survey)/.*$ /$1/public/index.php last;
http://10.70.33.140/survey/public/index.php
/data/www/ms/survey/public/index.php
路由:
/data/www/ms/survey/routes/web.php
一)$app->group(['prefix' => 'private','namespace'=>'Api\V1'], function () use ($app) {
$app->get('survey/list', ['uses' => 'SurveyController@list']);
http://47.93.207.136/private/survey/list
app/Http/Controllers/Api/V1/SurveyController.php
二)$app->group(['namespace'=>'Api\V1'], function () use ($app) {
$app->get('activity/survey', ['uses' => 'ActivityController@survey']);
http://47.93.207.136/activity/survey
app/Http/Controllers/Api/V1/ActivityController.php 里有一行:
$client = new SurveyClient();
./app/Helpers/Client/SurveyClient.php:class SurveyClient{
Lumen (5.5.2) (Laravel Components 5.5.*),路由的写法有点不一样:
$router->group(['prefix' => 'private','namespace'=>'Api\V1'], function () use ($router) {
$router->get('survey/list', ['uses' => 'SurveyController@list']);
$router->group(['namespace'=>'Api\V1'], function () use ($router) {
$router->get('activity/survey', ['uses' => 'ActivityController@survey']);
调用层级及配置文件的一个情况,二是如何引入框架目录的入口:
./app/Http/Controllers/Api/V1/SurveyController.php:class SurveyController extends Controller{
/**
* 删除互动
*/
public function delete(Request $request){
$iid = intval($request->input('iid'));
$res = Survey::deleteSurvey($iid);#调用Models
return $this->out($res?1:0,$res?"success":"failed");
}
调用Models位置:
./app/Models/Survey.php: public static function deleteSurvey($iid){
配置文件:
/data/www/ms/survey/config_production/database.php
/data/www/ms/survey/config_production/kafka.php
/data/www/ms/survey/config_production/redis.php
vi /data/htdocs/lumen.levoo.com/bootstrap/app.php #引入框架目录
======================================================================================
Lumen 中可以使用的 Facades,查看源代码,可用清单如下(https://segmentfault.com/a/1190000002902055):
/survey/bootstrap/app.php:$app->withFacades(); $app->withFacades();
./lumen-clear-edition/vendor/laravel/lumen-framework/src/Application.php: public function withFacades($aliases = true, $userAliases = [])
./vendor/laravel/lumen-framework/src/Application.php
public function withAliases($userAliases = [])
if (! static::$aliasesRegistered) {
static::$aliasesRegistered = true;
$merged = array_merge($defaults, $userAliases);
foreach ($merged as $original => $alias) {
class_alias($original, $alias);
}
}
==========================================================================================
/usr/local/composer/composer.phar global require "laravel/lumen-installer"
https://lumen.laravel.com/docs/5.4#server-requirements 下面的:
chmod a+x /root/.config/composer/vendor/laravel/lumen-installer/lumen
/root/.config/composer/vendor/bin/lumen new lumen.levoo.com
/data/htdocs/lumen.levoo.com/blog/routes/web.php
你可以将所有路由都定义在routes/web.php中。最基本的 Lumen 路由接收:
http://laravelacademy.org/post/6337.html
$app->group(['prefix'=>'test'],function($app){
$app->get("/index",["uses" => "TestController@index"]);
});
【lumen】基础点记录使用:blog.csdn.net/imdingding/article/details/48679359
app/Http/routes.php中进行路由配置可以使用如下路由组的形式,在路由上lumen和laravel有一些区别
$app->group(['prefix' => 'scrollnews','namespace' => 'App\Http\Controllers'],function($app) {
$app->get('/','NewsController@showall');
$app->get('/{time}_{newpage}.htm','NewsController@showtime');
$app->get('/{newpage}.htm', 'NewsController@show');
});
http://123.57.252.183/test/index
hello Lumen (5.4.5) (Laravel Components 5.4.*)
/data/htdocs/lumen.levoo.com/app/Http/Controllers/TestController.php
<?php
namespace App\Http\Controllers;
use App\user; //新增部分
use Laravel\Lumen\Routing\Controller as BaseController;
use Illuminate\Http\Request;
class TestController extends BaseController
{
//直接传人sql方式操作数据库
function index(Request $request){
echo "hello Lumen (5.4.5) (Laravel Components 5.4.*)。";die;
return User::all();
}
}
以上实践来源及变通参看了:http://blog.5ibc.net/p/87952.html
PHP message: PHP Fatal error: Uncaught UnexpectedValueException: The stream or file "/data/htdocs/lumen.levoo.com/storage/logs/lumen.log" could not be opened: failed to open stream: Permission denied in /data/htdocs/lumen.levoo.com/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107
mkdir
chmod -R 755 /data/htdocs/lumen.levoo.com/storage
chown -R www /data/htdocs/lumen.levoo.com/storage
Controller类的写法:https://segmentfault.com/q/1010000002727820
/data/htdocs/lumen.levoo.com/blog/app/Http/Controllers/AccountController.php
关于数据库配置文件:
默认情况下, Lumen 使用单一的 .env 文件来配置你的应用, 然而, 你也可以使用 Laravel 风格 的配置方法.
/data/htdocs/lumen.levoo.com/vendor/laravel/lumen-framework/config/database.php
文件夹下对应的配置文件复制到根目录下的 config 文件里面就行.
https://lumen.laravel-china.org/docs/5.3/configuration#configuration-files
Redis:
CACHE_DRIVER=file
SESSION_DRIVER=redis
QUEUE_DRIVER=sync
REDIS_HOST=192.168.1.248
REDIS_PASSWORD=null
REDIS_PORT=6379
今天在部署服务器的时候,使用composer来安装依赖。遇到了如下情况,这块出错好像和Redis配置有关,得在.env里配置好并运行起来。
The Process class relies on proc_open, which is not available on your PHP installation.
[ErrorException]
proc_get_status() has been disabled for security reasons
开始的时候,我有些不知所措,于是冷静下来思考一番,然后goolge了一下
解决方法:
在php.ini中,找到disable_functions选项,看看后面是否有proc_open函数被禁用了,如果有的话,去掉即可
其实如果php的文档熟悉的话,你应该马上就能知道proc_open实际上是一个函数,是php用来和shell交互的函数,一般这种可以直接作用于操作系统的函数是非常不安全的,对于这种不安全的函数,总是要做一些措施来进行保护
php artisan make:migration create_table_cars --create=cars
php artisan make:migration create_table_cars --create=cars
Created Migration: 2017_03_04_160644_create_table_cars
/data/htdocs/lumen.levoo.com/database/migrations/2017_03_04_160644_create_table_cars.php
public function up()
{
Schema::create('cars', function (Blueprint $table) {
$table->increments('id');
$table->string('make');
$table->string('model');
$table->string('year');
$table->timestamps();
});
}
php artisan migrate
Migrated: 2017_03_04_161708_create_table_cars
migrations记录历史 /car 两个表:
id int(10) UNSIGNED
make varchar(255)
model varchar(255)
year varchar(255)
create d_attimestamp
问题实践来源:http://www.cnblogs.com/crisenchou/p/6237781.html
打开方法来自:http://www.codesec.net/view/497671.html?winzoom=1
Model这块和Controll层的配置:
1)Controll层, /data/htdocs/lumen.levoo.com/app/Http/Controllers/TestController.php
<?php
namespace App\Http\Controllers;
use App\Models\Information;
use App\Models\Collection;
//use App\User; //新增部分APP目录下
use App\Models\User; //App\Models\User目录下
use Laravel\Lumen\Routing\Controller as BaseController;
use Illuminate\Http\Request;
class TestController extends BaseController
{
//直接传人sql方式操作数据库
function index(Request $request){
/*
$UserModel = new User();
$result = $User::all(); //这样也成
$result2 = $UserModel::all2(); //这样也成
*/
$result = User::all();
$result2 = User::all2();//这个在Model自定义的all2也能被调用输出结果
print_r($result);
echo "<hr>";
print_r($result2);
}
}
2)Model层:/data/htdocs/lumen.levoo.com/app/Models/User.php
<?php
//namespace App; //这个得注释掉,容易和App/User.php发生错误引用。
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
//默认操作数据库的users表,需要定制的话请看文档,下面有自己的配置。
class User extends Model
{
/**
* The connection name for the model.
*
* @var string
*/
protected $connection = 'mysql';
/**
* 表名
*
* @var string
*/
protected $table = 'levoo_sns_user'; //指定操作表名
protected $primaryKey = "id"; //指定主键
public $timestamps = false;
protected $dateFormat = 'U';
static public function all2(){
$User = User::all();
return $User;
}
}
=================MVC模板学习=============================
/data/htdocs/lumen.levoo.com/app/Http/Controllers/TestController.php
<?php
namespace App\Http\Controllers;
use App\Models\Information;
use App\Models\Collection;
//use App\User; //新增部分APP目录下
use App\Models\User; //App\Models\User目录下
use Laravel\Lumen\Routing\Controller as BaseController;
use Illuminate\Http\Request;
class TestController extends BaseController
{
//直接传人sql方式操作数据库
function index(Request $request){
/*
$UserModel = new User();
$result = $User::all(); //这样也成
$result2 = $UserModel::all2(); //这样也成
*/
$result = User::all();
//$result2 = User::all2();//这个在Model自定义的all2也能被调用输出结果
/*
print_r($result);
echo "<hr>";
print_r($result2);
*/
//view()->exists('user');
return view('test', ['name' => 'jackX','results' => $result]);
}
}
vi /data/htdocs/lumen.levoo.com/resources/views/test.blade.php
<!-- 该视图存放 resources/views/greeting.php -->
<html>
<body>
<h1>Hello, {{ $name }}</h1>
<h1>Hello, {{ $name2 or 'Default' }}</h1>
<h1>Hello, {!! $name !!}</h1>
<h1>Array, {{ $results}}</h1>
<h1>Array, {!! $results !!}</h1>
Blade for each:<br>
<h1>
@foreach ($results as $user)
<ul>
<li>This is user {{ $user->id }}</li>
<li>This is user {{ $user->mobile }}</li>
<li>This is user {{ $user->fansmobile }}</li>
<li>This is user {{ $user->followedTime }}</li>
</ul>
@endforeach
</h1>
<h1>
@foreach ($results as $user)
<ul>
@if ($user->id == 1)
用户Id=1,标识一下:
@endif
<li>This is user {{ $user->id }}</li>
<li>This is user {{ $user->mobile }}</li>
<li>This is user {{ $user->fansmobile }}</li>
<li>This is user {{ $user->followedTime }}</li>
</ul>
@endforeach
</h1>
<h1>只显示id=1的区块:</h1>
<h1>
@foreach ($results as $user)
<ul>
@continue($user->id == 2)
<li>This is user {{ $user->id }}</li>
<li>This is user {{ $user->mobile }}</li>
<li>This is user {{ $user->fansmobile }}</li>
<li>This is user {{ $user->followedTime }}</li>
</ul>
@break($user->id == 1)
@endforeach
</h1>
</body>
</html>
模板输出:http://123.57.252.183/test/index
Hello, jackX
Hello, Default
Hello, jackX
Array, [{"id":1,"mobile":"1881**65108","fansmobile":"18810322234","followedTime":1211212121},{"id":2,"mobile":"1881**65108","fansmobile":"18810322232","followedTime":121212}]
Array, [{"id":1,"mobile":"1881**65108","fansmobile":"18810322234","followedTime":1211212121},{"id":2,"mobile":"1881**65108","fansmobile":"18810322232","followedTime":121212}]
Blade for each:
This is user 1
This is user 1881**65108
This is user 18810322234
This is user 1211212121
This is user 2
This is user 1881**65108
This is user 18810322232
This is user 121212
用户Id=1,标识一下:
This is user 1
This is user 1881**65108
This is user 18810322234
This is user 1211212121
This is user 2
This is user 1881**65108
This is user 18810322232
This is user 121212
只显示id=1的区块:
This is user 1
This is user 1881**65108
This is user 18810322234
This is user 1211212121
这个叫Blade的模板引擎解析成PHP的,也就是相当于没有啥大的损耗,如果它的算法还算先进的前提下,位置在:
/data/htdocs/lumen.levoo.com/storage/framework/views/9e3b647aebb6a248d1ae42408e87c3fc7f5bc520.php
为什么这么说呢,如下,我在想为何要搞成这样,PHP裸写不也一样么,像Ci框架啥的,思考思考,这样也算是能模板和程序分离罢:
<h1>只显示id=1的区块:</h1>
<h1>
<?php $__currentLoopData = $results; $__env->addLoop($__currentLoopData); foreach($__currentLoopData as $user): $__env->incrementLoopIndices(); $loop = $__env->getLastLoop(); ?>
<ul>
<?php if($user->id == 2) continue; ?>
<li>This is user <?php echo e($user->id); ?></li>
<li>This is user <?php echo e($user->mobile); ?></li>
<li>This is user <?php echo e($user->fansmobile); ?></li>
<li>This is user <?php echo e($user->followedTime); ?></li>
</ul>
<?php if($user->id == 1) break; ?>
<?php endforeach; $__env->popLoop(); $loop = $__env->getLastLoop(); ?>
</h1>
主要是对这个模板有一个大体理解,和Smarty啥的有一个初步了解,参考自:
http://laravelacademy.org/post/6780.html
======================================================================
Nginx配置文件:
server
{
listen 80 default_server;
server_name 101.200.189.210 lumen.levoo.com;
index index.html index.htm index.php;
root /data/htdocs/lumen.levoo.com/blog/public;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
location ~ .*\.(php|php5)?$
{
fastcgi_pass unix:/dev/shm/php-fcgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
#if (!-f $request_filename){
# rewrite ^/(.+)$ /index.php?s=$1 last;
# break;
#}
}
access_log /data/logs/nginx/access_lumen_levoo.log;
}
上面location / {里被注释掉的也成,只是优雅度不够,这块好像手册有说明,我当时把 try_files $uri $uri/ /index.php?$query_string;放到location ~ .*\.(php|php5)?$ 里了,发现不对。
http://123.57.252.183/foo
Hello World
老外:
http://stackoverflow.com/questions/32281294/lumen-simple-route-request-doesnt-work
老外也有这个问题:
http://laravel.io/forum/05-08-2014-nginx-laravel-routing-shows-404?page=1
主从数据库配置(多台读库配置):
http://blog.sina.com.cn/s/blog_9bbafb790102win1.html
基于Lumen搭建一个OAUTH2认证的API框架:
http://www.bibihub.com/php/lumen-mobile-api-oauth-2-authentication/
========DB学习=========
基本使用
注意:如果你想要使用DB门面,应该取消bootstrap/app.php文件中$app->withFacades()调用前的注释
vi bootstrap/app.php
下面这个需要门面:
$app->get('/foo', function () use ($app) {
$results = app('db')->select("SELECT * FROM levoo_sns_user");
print_r($results);
$results = DB::select("SELECT * FROM levoo_sns_user");//这个需要门面
print_r($results);
return 'Hello World';
});
一些报错的日志:SQLSTATE[HY000] [2002] Connection refused
grep: ./survey/config_production/config_production: Too many levels of symbolic links
./survey/config_production/app.php: 'lumen_log_path'=>'/data/logs/lumen/survey.log', //框架日志
grep: ./survey/config/config_production: Too many levels of symbolic links
./survey/config/app.php: 'lumen_log_path'=>'/data/logs/lumen/survey.log', //框架日志
tail -f survey.log
Next Illuminate\Database\QueryException: SQLSTATE[HY000] [2002] Connection refused (SQL: select count(*) as aggregate from `survey` where `type` = 0 and `user` = 271 and `state` = 0) in /data/www/ms/lumen-clear-edition/vendor/illuminate/database/Connection.php:664
图解证明:当地看北极星仰角,就是当地纬度;两者
图解证明:当地看北极星仰角,就是当地纬度;两者互为充分必要条件! 第一种情况:当地在北极点上
第二种情况:当地位于赤道上
http://wapwenku.baidu.com/view/fb2d8e52f46527d3240ce0ec.html?ssid=0&from=844b&uid=0&pu=sz@1320_2001#3
图解证明:当地看北极星仰角,就是当地纬度;两者互为充分必要条件! 第一种情况:当地在北极点上
第二种情况:当地位于赤道上
http://wapwenku.baidu.com/view/fb2d8e52f46527d3240ce0ec.html?ssid=0&from=844b&uid=0&pu=sz@1320_2001#3
[实践OK]Linux下 php环境安装、配置composer,使用composer安装laravel/lumen、zan等框架,写一个读取数据库的。
Php/Js/Shell/Go jack 2017-1-10 23:17
/usr/bin/env: PHP: No such file or directory报错
su www
[root@VM-0-15-centos ~]# curl -sS https://getcomposer.org/installer | php
#把composer.phar转移之bin目录以便全局使用
[root@VM-0-15-centos ~]# mv composer.phar /usr/local/bin/composer
#展示版本信息说明成功
[root@VM-0-15-centos ~]# composer -v
如果出现这个提示,是因为composer不建议root账号运行,可以输入y,或者切换账号
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]?
sudo -u www -H/usr/local/composer/bin/composer config repo.packagist composer https://mirrors.aliyun.com/composer/
[ErrorException]
touch(): Unable to create file /home/www/.config/composer/config.json because No such file or directory
#composer clear-cache
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
Cache directory does not exist (cache-vcs-dir):
Cache directory does not exist (cache-repo-dir):
Cache directory does not exist (cache-files-dir):
Clearing cache (cache-dir): /root/.cache/composer
如果是其它用户就是在它的家目录下面建立配置文件。
[root@nexus-repo-10-10-0-109:/data/www/l.levoo.com]
#sudo -u www -H /usr/local/composer/composer update
Loading composer repositories with package information
[root@nexus-repo-10-10-0-109:/data/www/l.levoo.com]
#sudo -u www -H /usr/local/composer/composer update
......
Package operations: 41 installs, 14 updates, 38 removals
Failed to download dragonmantank/cron-expression from dist: The zip extension is missing and unzip/7z commands cannot be called as proc_open is disabled, skipping.
Your command-line PHP is using multiple ini files. Run `php --ini` to show them.
Now trying to download from source
PHP的一些安全函数禁用了,打开就成功了:
- Upgrading easyswoole/task (1.0.5 => 1.1.2): Extracting archive
- Upgrading easyswoole/log (1.0.3 => 1.1.1): Extracting archive
Generating autoload files
28 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
然后执行compser up
或者备份composer.lock
==========================================================================
composer config -g repo.packagist composer https://packagist.phpcomposer.com #换国内镜像URL地址。
composer是一个可执行命令,你在一个空目录下写一个composer.json
然后执行composer update,就能生成。
====================两步:软链接composer/PATH/下载autoloader===========================
软链接加PATH:
easy swoole 3.0.9 官方并不是最新的,换换阿里云镜像:
全局替换:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer clear-cache # 此步奏选泽性操作,清除所有 package 缓存。
composer clear-cache
Cache directory does not exist (cache-vcs-dir):
Clearing cache (cache-repo-dir): /data/www/.cache/composer/repo
Clearing cache (cache-files-dir): /data/www/.cache/composer/files
Clearing cache (cache-dir): /data/www/.cache/composer
当前项目替换: (注意:不让root用户运行,用www用户)
cd 项目目录
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
不重新开终端不会生效,则可直接导入变量:
source /etc/profile.d/composer.sh
cd /usr/local/kafka-php
cat composer.json
{
"require": {
"nmred/kafka-php": "0.2.*"
}
}
composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
- Installing amphp/amp (v1.2.2): Downloading (100%)
- Installing psr/log (1.0.2): Downloading (100%)
- Installing nmred/kafka-php (v0.2.0.8): Downloading (100%)
Writing lock file
Generating autoload files
cd /usr/local/kafka-php
composer.json composer.lock vendor
目的是看下同事所说的Kafka死光了,kafka-php会退出的问题:
https://github.com/weiboad/kafka-php
===========================================================================
cd /usr/local/composer ,sudo -u www -H composer.phar install ,会去读取:/usr/local/composer/composer.json文件。
chown -R www.www /data/htdocs/sd.levoo.com #否则会报:/data/htdocs/sd.levoo.com/vendor does not exist and could not be created.
sudo -u www -H composer.phar install
实践如下:
vi /etc/sudoers
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/composer:/usr/local/php/bin
#sudo -u www -H composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
[ErrorException]
touch(): Unable to create file /home/www/.composer/config.json because No such file or directory
#mkdir /home/www
#chown www.www /home/www
#chmod 755 /home/www
#sudo -u www -H composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
#sudo -u www -H composer.phar install
Composer could not find a composer.json file in /usr/local/composer
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
建立composer.json如下,可以根据需要添加你所依赖的库,但下面一定得包含在内,autoload必须要指定app和test的目录不得省略。
{
"require": {
"tmtbe/swooledistributed":">2.0.0"
},
"autoload": {
"psr-4": {
"app\\": "src/app",
"test\\": "src/test"
}
}
}
/usr/local/composer/composer.json
运行:
#sudo -u www -H composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
[RuntimeException]
/usr/local/composer/vendor does not exist and could not be created.
[RuntimeException]
/usr/local/composer/vendor/symfony/intl does not exist and could not be created
- Installing symfony/intl (v3.3.8):
[Symfony\Component\Process\Exception\RuntimeException]
The Process class relies on proc_open, which is not available on your PHP installation.
PHP需有proc_open,得从PHP的php.ini里给去掉:
; disable_functions = chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_
restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket
#sudo -u www -H composer.phar install
Composer could not find a composer.json file in /usr/local/php/etc
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
得cd到:/usr/local/composer 里,再执行:sudo -u www -H composer.phar install
#sudo -u www -H composer.phar install
[ErrorException]
proc_get_status() has been disabled for security reasons 和上面一样:得从PHP的php.ini里给去掉。
[RuntimeException]
Could not delete /usr/local/composer/vendor/symfony/intl:
chown -R www.www /usr/local/composer/vendor
[ErrorException]
file_put_contents(./composer.lock): failed to open stream: Permission denied #写入/usr/local/composer/composer.lock权限不够。
[root@gitlab-jenkins_php-redis_123.57.252.183:/usr/local]
#chown www.www composer
#sudo -u www -H composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
From:https://getcomposer.org/download/
http://blog.csdn.net/yoywow/article/details/52074512
二、使用composer安装laravel/lumen:
遇到问题:
修改 composer 的全局配置文件(推荐方式)
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:
[root@a composer]# chtdocs
[root@a htdocs]# cd lumen.levoo.com/
[root@a lumen.levoo.com]# /usr/local/composer/composer.phar global require "laravel/lumen-installer"
Changed current directory to /root/.config/composer
Do not run Composer as root/super user! See https://getcomposer.org/root for details
compser 执行命令提示do not run composer as root/super !
这个是因为composer为了防止非法脚本在root下执行,解决办法随便切换到非root用户即可
su www
mkdir -p /home/www/.cache
chown -R www:www /home/www/.cache
composer require easyswoole/hot-reload
Cannot create cache directory /home/www/.cache/composer/repo/https---mirrors.aliyun.com-composer/, or directory is not writable. Proceeding without cache
Cannot create cache directory /home/www/.cache/composer/files/, or directory is not writable. Proceeding without cache
Using version ^0.1.2 for easyswoole/hot-reload
./composer.json has been updated
PATH变量设置Ok的方法如下:
打开~/.bashrc
sudo vim ~/.bashrc
添加行:
export PATH=$PATH:/home/lumen/.config/composer/vendor/bin
用Linux系统。比如要把/etc/apache/bin目录添加到PATH中,方法有三:
1.#PATH=c/etc/apache/bin
使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效
2.#vi /etc/profile
在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能有任何空格)
这种方法最好,除非你手动强制修改PATH的值,否则将不会被改变
3.#vi ~/.bash_profile
修改PATH行,把/etc/apache/bin添加进去
这种方法是针对用户起作用的
From:http://opsmysql.blog.51cto.com/2238445/665990
lumen没有成功:
useradd lumen
su lumen
cd /data/htdocs/laravel.levoo.com
/usr/local/composer/composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
进行上述设置后,laravel有门,能下载了:
[lumen@a laravel.levoo.com]$ pwd
/data/htdocs/laravel.levoo.com
[lumen@a laravel.levoo.com]$ /usr/local/composer/composer.phar global require "laravel/lumen-installer"
Changed current directory to /home/lumen/.config/composer
Using version ^1.0 for laravel/lumen-installer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 10 installs, 0 updates, 0 removals
- Installing symfony/process (v3.2.1) Downloading: 100%
- Installing psr/log (1.0.2) Downloading: 100%
- Installing symfony/debug (v3.2.1) Downloading: 100%
- Installing symfony/polyfill-mbstring (v1.3.0) Downloading: 100%
- Installing symfony/console (v3.2.1) Downloading: 100%
- Installing guzzlehttp/promises (v1.3.1) Downloading: 100%
- Installing psr/http-message (1.0.1) Downloading: 100%
- Installing guzzlehttp/psr7 (1.3.1) Downloading: 100%
- Installing guzzlehttp/guzzle (6.2.2) Downloading: 100%
- Installing laravel/lumen-installer (v1.0.2) Downloading: 100%
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/filesystem ()
Writing lock file
Generating autoload files
生成文件如下:
[lumen@a composer]$ pwd
/home/lumen/.config/composer
[lumen@a composer]$ ls /home/lumen/.config/composer
auth.json composer.json composer.lock config.json vendor
开始学习数据库:
http://blog.csdn.net/wowkk/article/details/52104689
/data/htdocs/lumen.levoo.com/blog/.env
APP_ENV=local
APP_DEBUG=true
APP_KEY=
APP_TIMEZONE=UTC
DB_CONNECTION=mysql
DB_HOST=10.44.202.177
DB_PORT=3306
DB_DATABASE=levoo_egg
DB_USERNAME=levoo
DB_PASSWORD=new@levoo.com
CACHE_DRIVER=memcached
QUEUE_DRIVER=sync
/data/htdocs/lumen.levoo.com/blog/app/Http/Controllers/AccountController.PHP
/data/htdocs/lumen.levoo.com/blog/routes/web.php
<?php
$app->group(["namespace"=>"App\Http\Controllers"], function()use($app){
//账户控制器
$app->get("/AccountController",["uses" => "AccountController@accountController"]);
});
model:/data/htdocs/lumen.levoo.com/blog/app/Models/User.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
}
在app/Http/Controllers目录下AccountController.php,修改为
<?php
namespace App\Http\Controllers;
use App\user; //新增部分
use Laravel\Lumen\Routing\Controller as BaseController;
use Illuminate\Http\Request;
class AccountController extends BaseController
{
//直接传人sql方式操作数据库
function accountController(Request $request){
return User::all();
}
}
http://101.200.189.210/AccountController/accountController
su www
[root@VM-0-15-centos ~]# curl -sS https://getcomposer.org/installer | php
#把composer.phar转移之bin目录以便全局使用
[root@VM-0-15-centos ~]# mv composer.phar /usr/local/bin/composer
#展示版本信息说明成功
[root@VM-0-15-centos ~]# composer -v
如果出现这个提示,是因为composer不建议root账号运行,可以输入y,或者切换账号
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]?
sudo -u www -H/usr/local/composer/bin/composer config repo.packagist composer https://mirrors.aliyun.com/composer/
[ErrorException]
touch(): Unable to create file /home/www/.config/composer/config.json because No such file or directory
#composer clear-cache
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Continue as root/super user [yes]? yes
Cache directory does not exist (cache-vcs-dir):
Cache directory does not exist (cache-repo-dir):
Cache directory does not exist (cache-files-dir):
Clearing cache (cache-dir): /root/.cache/composer
如果是其它用户就是在它的家目录下面建立配置文件。
[root@nexus-repo-10-10-0-109:/data/www/l.levoo.com]
#sudo -u www -H /usr/local/composer/composer update
Loading composer repositories with package information
[root@nexus-repo-10-10-0-109:/data/www/l.levoo.com]
#sudo -u www -H /usr/local/composer/composer update
......
Package operations: 41 installs, 14 updates, 38 removals
Failed to download dragonmantank/cron-expression from dist: The zip extension is missing and unzip/7z commands cannot be called as proc_open is disabled, skipping.
Your command-line PHP is using multiple ini files. Run `php --ini` to show them.
Now trying to download from source
PHP的一些安全函数禁用了,打开就成功了:
- Upgrading easyswoole/task (1.0.5 => 1.1.2): Extracting archive
- Upgrading easyswoole/log (1.0.3 => 1.1.1): Extracting archive
Generating autoload files
28 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
然后执行compser up
或者备份composer.lock
==========================================================================
composer config -g repo.packagist composer https://packagist.phpcomposer.com #换国内镜像URL地址。
composer是一个可执行命令,你在一个空目录下写一个composer.json
然后执行composer update,就能生成。
====================两步:软链接composer/PATH/下载autoloader===========================
软链接加PATH:
easy swoole 3.0.9 官方并不是最新的,换换阿里云镜像:
全局替换:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer clear-cache # 此步奏选泽性操作,清除所有 package 缓存。
composer clear-cache
Cache directory does not exist (cache-vcs-dir):
Clearing cache (cache-repo-dir): /data/www/.cache/composer/repo
Clearing cache (cache-files-dir): /data/www/.cache/composer/files
Clearing cache (cache-dir): /data/www/.cache/composer
当前项目替换: (注意:不让root用户运行,用www用户)
cd 项目目录
composer config repo.packagist composer https://mirrors.aliyun.com/composer/
不重新开终端不会生效,则可直接导入变量:
source /etc/profile.d/composer.sh
cd /usr/local/kafka-php
cat composer.json
{
"require": {
"nmred/kafka-php": "0.2.*"
}
}
composer update
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 3 installs, 0 updates, 0 removals
- Installing amphp/amp (v1.2.2): Downloading (100%)
- Installing psr/log (1.0.2): Downloading (100%)
- Installing nmred/kafka-php (v0.2.0.8): Downloading (100%)
Writing lock file
Generating autoload files
cd /usr/local/kafka-php
composer.json composer.lock vendor
目的是看下同事所说的Kafka死光了,kafka-php会退出的问题:
https://github.com/weiboad/kafka-php
===========================================================================
cd /usr/local/composer ,sudo -u www -H composer.phar install ,会去读取:/usr/local/composer/composer.json文件。
chown -R www.www /data/htdocs/sd.levoo.com #否则会报:/data/htdocs/sd.levoo.com/vendor does not exist and could not be created.
sudo -u www -H composer.phar install
实践如下:
vi /etc/sudoers
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/composer:/usr/local/php/bin
#sudo -u www -H composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
[ErrorException]
touch(): Unable to create file /home/www/.composer/config.json because No such file or directory
#mkdir /home/www
#chown www.www /home/www
#chmod 755 /home/www
#sudo -u www -H composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
#sudo -u www -H composer.phar install
Composer could not find a composer.json file in /usr/local/composer
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
建立composer.json如下,可以根据需要添加你所依赖的库,但下面一定得包含在内,autoload必须要指定app和test的目录不得省略。
{
"require": {
"tmtbe/swooledistributed":">2.0.0"
},
"autoload": {
"psr-4": {
"app\\": "src/app",
"test\\": "src/test"
}
}
}
/usr/local/composer/composer.json
运行:
#sudo -u www -H composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
[RuntimeException]
/usr/local/composer/vendor does not exist and could not be created.
[RuntimeException]
/usr/local/composer/vendor/symfony/intl does not exist and could not be created
- Installing symfony/intl (v3.3.8):
[Symfony\Component\Process\Exception\RuntimeException]
The Process class relies on proc_open, which is not available on your PHP installation.
PHP需有proc_open,得从PHP的php.ini里给去掉:
; disable_functions = chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_
restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket
#sudo -u www -H composer.phar install
Composer could not find a composer.json file in /usr/local/php/etc
To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section
得cd到:/usr/local/composer 里,再执行:sudo -u www -H composer.phar install
#sudo -u www -H composer.phar install
[ErrorException]
proc_get_status() has been disabled for security reasons 和上面一样:得从PHP的php.ini里给去掉。
[RuntimeException]
Could not delete /usr/local/composer/vendor/symfony/intl:
chown -R www.www /usr/local/composer/vendor
[ErrorException]
file_put_contents(./composer.lock): failed to open stream: Permission denied #写入/usr/local/composer/composer.lock权限不够。
[root@gitlab-jenkins_php-redis_123.57.252.183:/usr/local]
#chown www.www composer
#sudo -u www -H composer.phar install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
From:https://getcomposer.org/download/
http://blog.csdn.net/yoywow/article/details/52074512
二、使用composer安装laravel/lumen:
遇到问题:
修改 composer 的全局配置文件(推荐方式)
打开命令行窗口(windows用户)或控制台(Linux、Mac 用户)并执行如下命令:
[root@a composer]# chtdocs
[root@a htdocs]# cd lumen.levoo.com/
[root@a lumen.levoo.com]# /usr/local/composer/composer.phar global require "laravel/lumen-installer"
Changed current directory to /root/.config/composer
Do not run Composer as root/super user! See https://getcomposer.org/root for details
compser 执行命令提示do not run composer as root/super !
这个是因为composer为了防止非法脚本在root下执行,解决办法随便切换到非root用户即可
su www
mkdir -p /home/www/.cache
chown -R www:www /home/www/.cache
composer require easyswoole/hot-reload
Cannot create cache directory /home/www/.cache/composer/repo/https---mirrors.aliyun.com-composer/, or directory is not writable. Proceeding without cache
Cannot create cache directory /home/www/.cache/composer/files/, or directory is not writable. Proceeding without cache
Using version ^0.1.2 for easyswoole/hot-reload
./composer.json has been updated
PATH变量设置Ok的方法如下:
打开~/.bashrc
sudo vim ~/.bashrc
添加行:
export PATH=$PATH:/home/lumen/.config/composer/vendor/bin
用Linux系统。比如要把/etc/apache/bin目录添加到PATH中,方法有三:
1.#PATH=c/etc/apache/bin
使用这种方法,只对当前会话有效,也就是说每当登出或注销系统以后,PATH 设置就会失效
2.#vi /etc/profile
在适当位置添加 PATH=$PATH:/etc/apache/bin (注意:= 即等号两边不能有任何空格)
这种方法最好,除非你手动强制修改PATH的值,否则将不会被改变
3.#vi ~/.bash_profile
修改PATH行,把/etc/apache/bin添加进去
这种方法是针对用户起作用的
From:http://opsmysql.blog.51cto.com/2238445/665990
lumen没有成功:
useradd lumen
su lumen
cd /data/htdocs/laravel.levoo.com
/usr/local/composer/composer.phar config -g repo.packagist composer https://packagist.phpcomposer.com
进行上述设置后,laravel有门,能下载了:
[lumen@a laravel.levoo.com]$ pwd
/data/htdocs/laravel.levoo.com
[lumen@a laravel.levoo.com]$ /usr/local/composer/composer.phar global require "laravel/lumen-installer"
Changed current directory to /home/lumen/.config/composer
Using version ^1.0 for laravel/lumen-installer
./composer.json has been created
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 10 installs, 0 updates, 0 removals
- Installing symfony/process (v3.2.1) Downloading: 100%
- Installing psr/log (1.0.2) Downloading: 100%
- Installing symfony/debug (v3.2.1) Downloading: 100%
- Installing symfony/polyfill-mbstring (v1.3.0) Downloading: 100%
- Installing symfony/console (v3.2.1) Downloading: 100%
- Installing guzzlehttp/promises (v1.3.1) Downloading: 100%
- Installing psr/http-message (1.0.1) Downloading: 100%
- Installing guzzlehttp/psr7 (1.3.1) Downloading: 100%
- Installing guzzlehttp/guzzle (6.2.2) Downloading: 100%
- Installing laravel/lumen-installer (v1.0.2) Downloading: 100%
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/filesystem ()
Writing lock file
Generating autoload files
生成文件如下:
[lumen@a composer]$ pwd
/home/lumen/.config/composer
[lumen@a composer]$ ls /home/lumen/.config/composer
auth.json composer.json composer.lock config.json vendor
开始学习数据库:
http://blog.csdn.net/wowkk/article/details/52104689
/data/htdocs/lumen.levoo.com/blog/.env
APP_ENV=local
APP_DEBUG=true
APP_KEY=
APP_TIMEZONE=UTC
DB_CONNECTION=mysql
DB_HOST=10.44.202.177
DB_PORT=3306
DB_DATABASE=levoo_egg
DB_USERNAME=levoo
DB_PASSWORD=new@levoo.com
CACHE_DRIVER=memcached
QUEUE_DRIVER=sync
/data/htdocs/lumen.levoo.com/blog/app/Http/Controllers/AccountController.PHP
/data/htdocs/lumen.levoo.com/blog/routes/web.php
<?php
$app->group(["namespace"=>"App\Http\Controllers"], function()use($app){
//账户控制器
$app->get("/AccountController",["uses" => "AccountController@accountController"]);
});
model:/data/htdocs/lumen.levoo.com/blog/app/Models/User.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
}
在app/Http/Controllers目录下AccountController.php,修改为
<?php
namespace App\Http\Controllers;
use App\user; //新增部分
use Laravel\Lumen\Routing\Controller as BaseController;
use Illuminate\Http\Request;
class AccountController extends BaseController
{
//直接传人sql方式操作数据库
function accountController(Request $request){
return User::all();
}
}
http://101.200.189.210/AccountController/accountController
[转]服务器操作系统应该选择 Debian/Ubuntu 还是 CentOS?
Unix/LinuxC技术 jack 2017-1-10 22:21
中老年人多多少少都会有些腰痛腿痛的毛病,这里和大家分享一个简单的神奇方法,5分钟缓解膝盖痛、腰痛、脚痛等。可以试试看!
粗盐、生姜、大葱一起炒热,具有消炎活血去风湿的功效,只需要5分钟就可以解除。
具体方法为,将粗盐用中火炒10分钟,倒在葱姜片上,待葱烂熟后,将葱姜捡出来,纯的热粗盐倒进布袋中,热敷膝盖、后腰等疼痛的关节,5分钟就管用。
如果粗盐凉了,可以加热后再用。如果觉得炒制麻烦,还可以用微波炉加热。
粗盐、生姜、大葱一起炒热,具有消炎活血去风湿的功效,只需要5分钟就可以解除。
具体方法为,将粗盐用中火炒10分钟,倒在葱姜片上,待葱烂熟后,将葱姜捡出来,纯的热粗盐倒进布袋中,热敷膝盖、后腰等疼痛的关节,5分钟就管用。
如果粗盐凉了,可以加热后再用。如果觉得炒制麻烦,还可以用微波炉加热。
一、用户在网站上观看网络视频或者网络教程的时候,有时候用户需要把视频下载到本地计算机中,但是一般的下载网站又不会提供下载按钮给用户,这样用户如果不利用插件就很难完成这样特殊的需求。今天给大家介绍一款可以把任何网站中的视频下载到本机电脑中的Chrome插件:Video download helper。
二、Chrome Cache View软件来下载:
Chrome Cache View,从名字上也可以看出来,这个软件的功能,比开发人员工具更加方便。免安装,运行后直接可以显示C:\Documents and Settings\用户名\Local Settings\Application Data\Google\Chrome\User Data\Default\Cache中的内容,不过是以原始地址显示的。直接复制出来地址就可下载了。
三、Chrome 的 Video Downloader professional插件,插件图标是向上箭头那个。
二、Chrome Cache View软件来下载:
Chrome Cache View,从名字上也可以看出来,这个软件的功能,比开发人员工具更加方便。免安装,运行后直接可以显示C:\Documents and Settings\用户名\Local Settings\Application Data\Google\Chrome\User Data\Default\Cache中的内容,不过是以原始地址显示的。直接复制出来地址就可下载了。
三、Chrome 的 Video Downloader professional插件,插件图标是向上箭头那个。
若是想要让牙齿洁白有光泽,建议刷牙时在牙膏里加入一滴柠檬汁,或是将柠檬皮磨碎,用牙刷沾一些来刷牙也有不错的效果。柠檬的用处非常多,以下的8种,您应该了解。
你喜欢柠檬吗?清爽的柠檬是许多人的最爱,除了用切片柠檬敷脸美白,近年来营养专家们纷纷关注柠檬所含有的丰富植化素,自制柠檬水饮用、或是利用柠檬皮的各种居家清洁妙招,天然无毒的生活形态已形成一股新风潮。
阅读全文
你喜欢柠檬吗?清爽的柠檬是许多人的最爱,除了用切片柠檬敷脸美白,近年来营养专家们纷纷关注柠檬所含有的丰富植化素,自制柠檬水饮用、或是利用柠檬皮的各种居家清洁妙招,天然无毒的生活形态已形成一股新风潮。
阅读全文
当开启MySQL数据库主从时,会产生大量如mysql-bin.00000* log的文件,这会大量耗费您的硬盘空间。
mysql-bin.000001
mysql-bin.000002
mysql-bin.000003
mysql-bin.000004
mysql-bin.000005
…
有三种解决方法:1.关闭mysql主从,关闭binlog;2.开启mysql主从,设置expire_logs_days;3.手动清除binlog文件,> PURGE MASTER LOGS TO ‘MySQL-bin.010′;
实现:
1.关闭mysql主从,关闭binlog
# vim /etc/my.cnf //注释掉log-bin,binlog_format # Replication Master Server (default) # binary logging is required for replication # log-bin=mysql-bin # binary logging format - mixed recommended # binlog_format=mixed
然后重启数据库
2.重启mysql,开启mysql主从,设置expire_logs_days
# vim /etc/my.cnf //修改expire_logs_days,x是自动删除的天数,一般将x设置为短点,如10 expire_logs_days = x //二进制日志自动删除的天数。默认值为0,表示“没有自动删除”
此方法需要重启mysql,附录有关于expire_logs_days的英文说明
当然也可以不重启mysql,开启mysql主从,直接在mysql里设置expire_logs_days
> show binary logs; > show variables like '%log%'; > set global expire_logs_days = 10;
3.手动清除binlog文件
# /usr/local/mysql/bin/mysql -u root -p > PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 10 DAY); //删除10天前的MySQL binlog日志,附录2有关于PURGE MASTER LOGS手动删除用法及示例 > show master logs;
也可以重置master,删除所有binlog文件:
# /usr/local/mysql/bin/mysql -u root -p > reset master; //附录3有清除binlog时,对从mysql的影响说明
附录:
1.expire_logs_days英文说明
Where X is the number of days you’d like to keep them around. I would recommend 10, but this depends on how busy your MySQL server is and how fast these log files grow. Just make sure it is longer than the slowest slave takes to replicate the data from your master.
Just a side note: You know that you should do this anyway, but make sure you back up your mysql database. The binary log can be used to recover the database in certain situations; so having a backup ensures that if your database server does crash, you will be able to recover the data.
2.PURGE MASTER LOGS手动删除用法及示例,MASTER和BINARY是同义词
> PURGE {MASTER | BINARY} LOGS TO 'log_name' > PURGE {MASTER | BINARY} LOGS BEFORE 'date'
删除指定的日志或日期之前的日志索引中的所有二进制日志。这些日志也会从记录在日志索引文件中的清单中被删除MySQL BIN-LOG 日志,这样被给定的日志成为第一个。
实例:
> PURGE MASTER LOGS TO 'MySQL-bin.010'; //清除MySQL-bin.010日志 > PURGE MASTER LOGS BEFORE '2008-06-22 13:00:00'; //清除2008-06-22 13:00:00前binlog日志 > PURGE MASTER LOGS BEFORE DATE_SUB( NOW, INTERVAL 3 DAY); //清除3天前binlog日志BEFORE,变量的date自变量可以为'YYYY-MM-DD hh:mm:ss'格式。
3.清除binlog时,对从mysql的影响
如果您有一个活性的从属服务器,该服务器当前正在读取您正在试图删除的日志之一,则本语句不会起作用,而是会失败,并伴随一个错误。不过,如果从属服务器是休止的,并且您碰巧清理了其想要读取的日志之一,则从属服务器启动后不能复制。当从属服务器正在复制时,本语句可以安全运行。您不需要停止它们。
来自:http://m.toutiao.com/i6371662680515674625/?tt_from=copy_link&utm_campaign=client_share&app=news_article&utm_source=copy_link&iid=6966412074&utm_medium=toutiao_ios
Redis-benchmark测试Redis性能
Cache与Store jack 2017-1-4 17:30
背景: 有时间对Redis的一个测试来看,特别是经过了网络,此时,会傻傻分不清楚是Redis本来性能就差,还是网络不好(PHP调用Redis的机器和Redis分离或不在同一网段),这个工具可以直接在Redis上测试Redis,或是在PHP上测试Redis,这样有一个粗粒度的判断和把握。
阅读全文
阅读全文
Laravel 扩展及调试利器 —— Laravel Debugbar 扩展包安装及使用教程,Laravel如何引用第三方(自定义)库。
Php/Js/Shell/Go jack 2016-12-28 15:05
调试栏(Laravel Debug Bar)
PHP调试栏项目无疑是一个巨大的成功,你无需到处编写var_dump。Laravel调试栏对该组件作了扩展,包含了路由、视图、事件以及更多信息。
这使得调试变得更加简单、快速,提高你的开发效率。
Confide
认证模块,包含了登录、注册、退出、密码重置等功能。
代码生成器(Laravel Generators)
使用简单的命令行就可以自动根据代码模板生成Model/View/Controller代码以及模块(Module)。
HTML压缩器(Laravel HTML Minify)
让你的页面减小大概18%,提升性能必备
后台管理(Laravel Administrator)
Laravel Administrator帮助开发者快速构建后台管理界面,无需重复构建。
OAuth 4 Laravel:OAuth支持
OAuth 2服务器:安全和100%标准兼容的OAuth服务器
摘自下载量最高的 100 个 Laravel 扩展包推荐:
https://laravel-china.org/topics/2530
阅读全文
关于Swoole的Client里的$swoole_client = new swoole_client和swoole_client $client是一个值的理解。
Swoole专题研究 jack 2016-12-22 14:53
核心语句:
swoole群上海求加入-张振亚-swoole-2345 14:38:38
php class 有一些魔术函数你知道吗
回忆未来-向东-Jàck 14:39:43
知道
__set __get
swoole群上海求加入-张振亚-swoole-2345 14:43:20
on方法只是注册一些事件
比如close。
swoole群上海求加入-张振亚-swoole-2345 14:44:28
swoole 连接关闭的时候 执行类似于 call_user_func($callable, $this, $data);
第一个参数是方法名,我们上面的写法是匿名函数
第二个参数就是对象本身,也就是swoole_client 对象
========================================================
swoole_client_function.php
php swoole_client_function.php
试着连接Server.php里获取硬件温度的旁端口操作失败
试着连接Server.php里获取硬件温度的旁端口操作失败
回忆未来-向东-Jàck 14:30:29
感觉$swoole_client->on("Receive", function(swoole_client $client和$swoole_client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
感觉是传个一个结构体是:swoole_client的,变量不一样,其实是一个东西是吧?兄弟这块哪儿有说呢?
$swoole_client和
function(swoole_client $client ...是一个东西。
这块感觉有啥知识点,兄弟能讲下吗?
swoole群上海求加入-张振亚-swoole-2345 14:31:40
就是一个值传递
回忆未来-向东-Jàck 14:32:39
但变量不一样呀,一个是$swoole_client,而另一个变量是,swoole_client $client,它是$client呀,$swoole_client和$client怎么就一样了?
swoole群上海求加入-张振亚-swoole-2345 14:33:33
$a = 1;$b = $a;
$a 和 $b 是不是一样
swoole群上海求加入-张振亚-swoole-2345 14:38:38
php class 有一些魔术函数你知道吗
回忆未来-向东-Jàck 14:39:43
知道
__set __get
swoole群上海求加入-张振亚-swoole-2345 14:43:20
on方法只是注册一些事件
比如close。
swoole群上海求加入-张振亚-swoole-2345 14:44:28
swoole 连接关闭的时候 执行类似于 call_user_func($callable, $this, $data);
第一个参数是方法名,我们上面的写法是匿名函数
第二个参数就是对象本身,也就是swoole_client 对象
swoole群上海求加入-张振亚-swoole-2345 14:45:50
也就是在执行onClose 回调,把本身的client对象传递过来了
你知道他们是同一个对象就行了
swoole群上海求加入-张振亚-swoole-2345 14:38:38
php class 有一些魔术函数你知道吗
回忆未来-向东-Jàck 14:39:43
知道
__set __get
swoole群上海求加入-张振亚-swoole-2345 14:43:20
on方法只是注册一些事件
比如close。
swoole群上海求加入-张振亚-swoole-2345 14:44:28
swoole 连接关闭的时候 执行类似于 call_user_func($callable, $this, $data);
第一个参数是方法名,我们上面的写法是匿名函数
第二个参数就是对象本身,也就是swoole_client 对象
========================================================
swoole_client_function.php
php swoole_client_function.php
试着连接Server.php里获取硬件温度的旁端口操作失败
试着连接Server.php里获取硬件温度的旁端口操作失败
回忆未来-向东-Jàck 14:30:29
感觉$swoole_client->on("Receive", function(swoole_client $client和$swoole_client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
感觉是传个一个结构体是:swoole_client的,变量不一样,其实是一个东西是吧?兄弟这块哪儿有说呢?
$swoole_client和
function(swoole_client $client ...是一个东西。
这块感觉有啥知识点,兄弟能讲下吗?
swoole群上海求加入-张振亚-swoole-2345 14:31:40
就是一个值传递
回忆未来-向东-Jàck 14:32:39
但变量不一样呀,一个是$swoole_client,而另一个变量是,swoole_client $client,它是$client呀,$swoole_client和$client怎么就一样了?
swoole群上海求加入-张振亚-swoole-2345 14:33:33
$a = 1;$b = $a;
$a 和 $b 是不是一样
swoole群上海求加入-张振亚-swoole-2345 14:38:38
php class 有一些魔术函数你知道吗
回忆未来-向东-Jàck 14:39:43
知道
__set __get
swoole群上海求加入-张振亚-swoole-2345 14:43:20
on方法只是注册一些事件
比如close。
swoole群上海求加入-张振亚-swoole-2345 14:44:28
swoole 连接关闭的时候 执行类似于 call_user_func($callable, $this, $data);
第一个参数是方法名,我们上面的写法是匿名函数
第二个参数就是对象本身,也就是swoole_client 对象
swoole群上海求加入-张振亚-swoole-2345 14:45:50
也就是在执行onClose 回调,把本身的client对象传递过来了
你知道他们是同一个对象就行了




