GVKun编程网logo

php – Symfony2:如何将查询持续时间记录到logs / dev.log中(php如何记录日志)

11

在这里,我们将给大家分享关于php–Symfony2:如何将查询持续时间记录到logs/dev.log中的知识,让您更了解php如何记录日志的本质,同时也会涉及到如何更有效地Linux下部署Symfo

在这里,我们将给大家分享关于php – Symfony2:如何将查询持续时间记录到logs / dev.log中的知识,让您更了解php如何记录日志的本质,同时也会涉及到如何更有效地Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs、Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs_PHP教程、php – Autoloader预期类Symfony2、php – Symfony / Doctrine Dateinterval(持续时间)如何将其存储在数据库中的内容。

本文目录一览:

php – Symfony2:如何将查询持续时间记录到logs / dev.log中(php如何记录日志)

php – Symfony2:如何将查询持续时间记录到logs / dev.log中(php如何记录日志)

在dev env中,Symfony2默认将SQL查询记录到dev.log.为了进行性能分析和调试,我还想记录查询的执行时间.这必须是可能的,因为“真实页面”的分析器显示每个查询旁边的执行时间.我认为正确的类是DBalLogger一个秒表实例,但我不知道我是如何以及在哪里正确配置这些服务(monolog?doctrine?dbal.connection?samples say我们必须使用setsqlLogger但我在哪里可以在我的config_dev中这样做.阳明海运?)

解决方法:

您可以注入monolog服务,然后手动添加时间参考

$logger = $this->get('logger');
$timestart = microtime(true);
// Your query goes here
$timeend = microtime(true);
$logger->info("Query time: " . (($timeend - $timestart) * 1000) . "s");

Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs

Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs

linux下部署symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs

  在linux下部署完symfony2,可能在访问的时候会报app/logs或者app/cache目录没有写权限的错误。在linux下,如果我们在命令行登陆的用户和web应用服务器(apache、nginx等)的用户不一样的时候,

可以使用下面四个方法来解决这个问题。

  

  1、在支持chmod +a 的系统下使用ACL

  很多版本的linux系统都支持chmod +a命令,所以我们优先使用这个命令。找出web应用服务器的用户名赋值到变量HTTPDUSER上。

<span>1</span> <span>$ rm -rf app/cache/*
</span><span>2</span> <span>$ rm -rf app/logs/*
</span><span>3</span> 
<span>4</span> $ HTTPDUSER=`ps aux | grep -E ''<span>[</span><span>a</span><span>]</span>pache|<span>[</span><span>h</span><span>]</span>ttpd|<span>[</span><span>_</span><span>]</span>www|<span>[</span><span>w</span><span>]</span>ww-data|<span>[</span><span>n</span><span>]</span>ginx'' | grep -v root | head -1<span> | cut -d\  -f1`
</span><span>5</span> $ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit"<span> app/cache app/logs
</span><span>6</span> $ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
登录后复制

  第四行命令是:找出web应用服务器的用户名赋值给变量HTTPDUSER;第五行命令是:赋予web应用服务器对app/logs或者app/cache目录读、写、创建目录等权限;第六行命令是:赋予命令行登陆用户对app/logs或者app/cache目录读、写、创建目录等权限。

  2、如果系统不支持chmod +a ,那么就使用setfacl命令来设置ACL

  首先要确定目录所在分区支持ACL和已经安装setfacl命令。

<span>1</span> $ HTTPDUSER=`ps aux | grep -E ''<span>[</span><span>a</span><span>]</span>pache|<span>[</span><span>h</span><span>]</span>ttpd|<span>[</span><span>_</span><span>]</span>www|<span>[</span><span>w</span><span>]</span>ww-data|<span>[</span><span>n</span><span>]</span>ginx'' | grep -v root | head -1<span> | cut -d\  -f1`
</span><span>2</span> $ sudo setfacl -R -m u:"$HTTPDUSER"<span>:rwX -m u:`whoami`:rwX app/cache app/logs
</span><span>3</span> $ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
登录后复制

  如果不起作用,在第二、三行命令添加 -n 选项。

  3、不使用ACL

  如果不是使用ACL,还可以改变umask,使这两个目录的用户组有创建和修改文件的权限(775,并且web应用服务器和命令行用户在同一个组)或者所有用户都拥有创建和修改文件的权限(777),但是这两组权限都是不安全的,给予的权限过高。把下面的代码添加到app/console, web/app.phpweb/app_dev.php 文件的首行。

<span>1</span> umask(<span>0002</span>); <span>//</span><span> 生成的目录(app/cache和app/logs)权限为0775
</span><span>2</span> 
<span>3</span> <span>//</span><span> 或者</span>
<span>4</span> 
<span>5</span> umask(<span>0000</span>); <span>//</span><span> 生成的目录(app/cache和app/logs)权限为0777</span>
登录后复制

  注:php的umask命令是非线程安全的。

 

  4、命令行登陆的用户和web应用服务器的用户为同一个用户。

 

 

    

tomcat中的xml文件该怎配置

初学的话就配置个端口号 跟用户权限就可以了~ 其他不用管
 

Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs_PHP教程

Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs_PHP教程

linux下部署symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs

  在linux下部署完symfony2,可能在访问的时候会报app/logs或者app/cache目录没有写权限的错误。在linux下,如果我们在命令行登陆的用户和web应用服务器(apache、nginx等)的用户不一样的时候,

可以使用下面四个方法来解决这个问题。

  

  1、在支持chmod +a 的系统下使用ACL

  很多版本的linux系统都支持chmod +a命令,所以我们优先使用这个命令。找出web应用服务器的用户名赋值到变量HTTPDUSER上。

立即学习“PHP免费学习笔记(深入)”;

<span>1</span> <span>$ rm -rf app/cache/*
</span><span>2</span> <span>$ rm -rf app/logs/*
</span><span>3</span> 
<span>4</span> $ HTTPDUSER=`ps aux | grep -E ''<span>[</span><span>a</span><span>]</span>pache|<span>[</span><span>h</span><span>]</span>ttpd|<span>[</span><span>_</span><span>]</span>www|<span>[</span><span>w</span><span>]</span>ww-data|<span>[</span><span>n</span><span>]</span>ginx'' | grep -v root | head -1<span> | cut -d\  -f1`
</span><span>5</span> $ sudo chmod +a "$HTTPDUSER allow delete,write,append,file_inherit,directory_inherit"<span> app/cache app/logs
</span><span>6</span> $ sudo chmod +a "`whoami` allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
登录后复制

  第四行命令是:找出web应用服务器的用户名赋值给变量HTTPDUSER;第五行命令是:赋予web应用服务器对app/logs或者app/cache目录读、写、创建目录等权限;第六行命令是:赋予命令行登陆用户对app/logs或者app/cache目录读、写、创建目录等权限。

  2、如果系统不支持chmod +a ,那么就使用setfacl命令来设置ACL

  首先要确定目录所在分区支持ACL和已经安装setfacl命令。

<span>1</span> $ HTTPDUSER=`ps aux | grep -E ''<span>[</span><span>a</span><span>]</span>pache|<span>[</span><span>h</span><span>]</span>ttpd|<span>[</span><span>_</span><span>]</span>www|<span>[</span><span>w</span><span>]</span>ww-data|<span>[</span><span>n</span><span>]</span>ginx'' | grep -v root | head -1<span> | cut -d\  -f1`
</span><span>2</span> $ sudo setfacl -R -m u:"$HTTPDUSER"<span>:rwX -m u:`whoami`:rwX app/cache app/logs
</span><span>3</span> $ sudo setfacl -dR -m u:"$HTTPDUSER":rwX -m u:`whoami`:rwX app/cache app/logs
登录后复制

  如果不起作用,在第二、三行命令添加 -n 选项。

  3、不使用ACL

  如果不是使用ACL,还可以改变umask,使这两个目录的用户组有创建和修改文件的权限(775,并且web应用服务器和命令行用户在同一个组)或者所有用户都拥有创建和修改文件的权限(777),但是这两组权限都是不安全的,给予的权限过高。把下面的代码添加到app/console, web/app.phpweb/app_dev.php 文件的首行。

<span>1</span> umask(<span>0002</span>); <span>//</span><span> 生成的目录(app/cache和app/logs)权限为0775
</span><span>2</span> 
<span>3</span> <span>//</span><span> 或者</span>
<span>4</span> 
<span>5</span> umask(<span>0000</span>); <span>//</span><span> 生成的目录(app/cache和app/logs)权限为0777</span>
登录后复制

  注:php的umask命令是非线程安全的。

 

  4、命令行登陆的用户和web应用服务器的用户为同一个用户。

 

 

    

tomcat中的xml文件该怎配置

初学的话就配置个端口号 跟用户权限就可以了~ 其他不用管
 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/894760.htmlTechArticleLinux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs 在linux下部署完Symfony2,可能在访问的时候会报app/logs或者app/cache目录没有写权...

php – Autoloader预期类Symfony2

php – Autoloader预期类Symfony2

我正在使用symfony 2.3框架,自动加载器声称已找到该文件,但没有类:
RuntimeException: The autoloader expected class "Sensio\Bundle\
FrameworkExtraBundle\Request\ParamConverter\DateTimeParamConverter" 
to be defined in file "/home/na/auth/vendor/sensio/framework-extra-bundle/
Sensio/Bundle/FrameworkExtraBundle/Request/ParamConverter/
DateTimeParamConverter.PHP". The file was found but the class was not in it,the class name or namespace probably has a typo.

这个引用的文件如下所示:

<?PHP

/*
 * This file is part of the Symfony framework.
 *
 * (c) Fabien Potencier <fabien@symfony.com>
 *
 * This source file is subject to the MIT license that is bundled
 * with this source code in the file LICENSE.
 */

namespace Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\ConfigurationInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
use DateTime;

/**
 * Convert DateTime instances from request attribute variable.
 *
 * @author Benjamin Eberlei <kontakt@beberlei.de>
 */
class DateTimeParamConverter implements ParamConverterInterface
{
    /**
     * @{inheritdoc}
     * 
     * @throws NotFoundHttpException When invalid date given
     */
    public function apply(Request $request,ConfigurationInterface $configuration)
    {
        $param = $configuration->getName();

        if (!$request->attributes->has($param)) {
            return false;
        }

        $options = $configuration->getoptions();
        $value   = $request->attributes->get($param);

        $date = isset($options['format'])
            ? DateTime::createFromFormat($options['format'],$value)
            : new DateTime($value);

        if (!$date) {
            throw new NotFoundHttpException('Invalid date given.');
        }

        $request->attributes->set($param,$date);

        return true;
    }

    /**
     * @{inheritdoc}
     */
    public function supports(ConfigurationInterface $configuration)
    {
        if (null === $configuration->getClass()) {
            return false;
        }

        return "DateTime" === $configuration->getClass();
    }
}

无论如何,一些可能有用的细节是我最近安装了Doctrine并运行命令……

2028  PHP app/console doctrine:schema:create
 2029  PHP app/console doctrine:generate:entities Auth

在那些命令之后,symfony停止了工作.我不知道这是不是一些奇怪的错误.如果您需要更多信息,我可以发帖.谢谢你的帮助.

缺少(或短)PHP开始标记也可能导致该错误.是的,这听起来很有趣,但如果您只是按照Symfony示例并复制/粘贴全班,您可能不会注意到(因为我没有).

php – Symfony / Doctrine Dateinterval(持续时间)如何将其存储在数据库中

php – Symfony / Doctrine Dateinterval(持续时间)如何将其存储在数据库中

我有一个问题,我正在编写一个对服务有某种保留的应用程序.该服务有持续时间,例如:

A massage that takes 1 hour and 15 minutes

然后我为这项服务预订系统.我在预订时需要计算结束日期时间.

所以我在我的数据库中有一个“开始”的日期时间,我不知道如何存储持续时间.因此,在预订后,我可以很容易地说,这将在其他一些日期时间结束.

我希望我很清楚.

问题是如何在数据库中存储持续时间以及如何用它来增加开始日期,所以我对时区等没有任何问题.

感谢帮助!

解决方法

这是一种只使用 PHP(而不是使用sql)的方法,时间以秒为单位进行管理以简化计算:

$reservation = new Reservation(); // Your entity object

$startDate = new \DateTime('Now');
$endDate = $startDate;
$endDate->modify('+'.4500.' seconds'); // Update the end time with the duration of the service

$reservation->setStartDate($startDate);
$reservation->setEndDate($endDate);

// Save the reservation
$em = $this->getDoctrine()->getManager();
$em->persist($reservation);
$em->flush();

编辑1:

要回答您的时区问题,最容易(我认为)是使用时间戳!在显示时,时间戳将转换为时区日期.从日期时间获取时间戳时,它是相同的,它是根据机器的时区计算的.所以时间戳在时区之间共享^^

这里的片段编辑:

// ...

// Save timestamp instead of datetime
$reservation->setStartTimestamp($startDate->getTimestamp());
$reservation->setEndTimestamp($endDate->getTimestamp());

// ...

编辑2:

要回答您的评论,如果您更改了持续时间,只需将持续时间保存在数据库中即可.

// First save
$reservation->setDuration(4000); // seconds

编辑持续时间时:

// Duration of a reservation change

// <- Load the $reservation to edit

$date = new \DateTime();
$date->setTimestamp($reservation->getStartTimestamp()); // Got start date

$reservation->setDuration($reservation->getDuration() + 2000); // For example,duration is increased of 2000 second

$endDate = $date;
$endDate->modify('+'.$reservation->getDuration().' seconds'); // Use start date and recalculate new end date
$reservation->setEndTimestamp($endDate->getTimestamp());

// <- Then update $reservation with a persist

关于php – Symfony2:如何将查询持续时间记录到logs / dev.log中php如何记录日志的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs、Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs_PHP教程、php – Autoloader预期类Symfony2、php – Symfony / Doctrine Dateinterval(持续时间)如何将其存储在数据库中的相关知识,请在本站寻找。

本文标签: