我已经学习python一段时间了.在开始这个"学习python"的过程中,我决定学习最新最好的3.1版本的python.我现在后悔这个决定,因为我想尝试一些python web开发框架,看起来他们中的许多人不支持3.1而且看起来可能需要数年才能支持新版本的Python特别是Django和TurboGears.这真的很令人失望.因此,SO用户,你有什么建议为我运行3.1的网络框架,并支持一些现代(我想我永远不会学习;-))网页框架功能,如MVC/ORM/URL路由/缓存等.
我想将我的Web应用程序中的错误/信息和警告消息记录到日志中.我最初想将所有这些记录到文本文件中.
但是,我的PHP Web应用程序需要对日志文件的写入权限,如果需要我的Web应用程序当前没有的日志文件轮换,则包含此日志文件的文件夹可能还需要写访问权限.另一种方法是让我将消息记录到MySQL数据库,因为我的Web应用程序已经在使用MySQL数据库来满足其所有数据存储需求.
但是,这让我觉得使用MySQL选项要比文件选项好得多,因为我已经有一个配置文件,其数据库访问信息使用文件系统权限进行保护.如果我现在使用日志文件选项,我需要修改文件和文件夹访问权限,这只会使我的应用程序不那么安全,并且会破坏记录的整个目的.
更新:我在db选项中看到的另一个好处是,不需要使用持久数据库连接重新打开每个网页的数据库连接,这是文件日志记录无法实现的.在文件记录的情况下,我将不得不打开,写入日志文件并关闭每个页面的文件.
它是否正确?我正在使用XAMPP进行开发,并且是LAMP的新手.请告诉我您的日志记录建议.谢谢.
更新:我更倾向于使用log4php将文本文件记录到我的Web服务器上的单独文件夹中,并为我的Apache帐户提供对该文件夹的写访问权限.
我有以下函数声明:
void fn(int);
Run Code Online (Sandbox Code Playgroud)
此函数具有单个整数类型参数。现在,我可以通过传递非 const 或 const 整数对象来调用此函数。无论哪种情况,此函数都会将对象复制到其本地 int 参数。因此,对此参数的任何修改都将是函数的局部修改,并且不会以任何方式影响调用者的实际参数。现在我的问题是在哪种情况下我将这个单个 int 参数声明为 const 类型?我认为不需要如下声明此函数。
void fn(const int);
Run Code Online (Sandbox Code Playgroud)
这是因为参数无论如何都会按值传递,并且函数在任何一种情况下都不能修改参数。我知道通过声明一个参数常量,函数不能在它的体内修改它。但是,即使函数修改,这里也没有缺点,因为参数是函数的本地参数。
const char *Greet(const char *c) {
string name;
if(c)
name = c;
if (name.empty())
return "Hello, Unknown";
return name.c_str();
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << Greet(0) << '\t' << Greet("Hello, World") << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我看到上面代码有2个错误.
从函数本地定义的字符串对象返回c_str.函数返回时字符串被破坏,显然c_str()将指向一些解除分配的内存.
从函数中返回"Hello,Unknown".这又是在堆栈中分配的const char数组,当函数返回时,它也应该被解除分配.但是,它没有,我猜这是因为返回值优化.
我的上述理解是否正确?
PS:我用gcc和MSVC10测试了上面的代码.GCC运行上面的代码很好,并且不会为字符串对象和常量字符串生成任何运行时错误或未定义的行为.MSVC10显示字符串对象的垃圾数据,但正确打印常量字符串.