我前段时间开始进行Web开发,但我基本上都花了很多时间学习PHP,MySQL/SQLite,(X)HTML/XML(XPath,XQuery,XSL)等.我带着一个开箱即用的东西XAMPP安装,一切都非常简单,我可以专注于语言学习.
然而,现在,我正在学习Ruby和Python(以及更多的Perl),但令我沮丧的是,我发现我基本上不了解Apache配置,或者与为嵌入式PHP设置环境相关的任何相关任务,Perl, Python和Ruby.
我最近发布了一个问题,我认为会带我在正确的方向.阅读完mod_wsgi和mod_rails文档之后,我比开始时更困惑.
我正在使用现有的XAMPP安装运行Windows 7 x64,刚刚使用了Ruby和Python,只安装了NetBeans; 而且我想知道:
我应该从一个新的Apache安装开始,还是XAMPP很好地堆积其他模块?
在哪里可以找到有关配置Apache以支持这些模块的一些信息?我正在逐步构建一个支持部分,全部或更多上述语言的环境.
我想我的问题可归纳为; 有哪些建议的阅读/学习资源用于配置基于Apache的多语言Web应用程序开发环境?
我希望这个问题不被认为具有高度的主观性或普遍性; 我只是迷失了,不想浪费时间茫然地盯着配置文件等.
我真的很感激任何见解,并原谅我的noob因素.我很惊讶我和这个领域一样不熟悉,很快就需要改变它.
无论我传递给哪个值/数据类型对$pdo->quote($value, $type);,它似乎总是将其引用为字符串:
echo $pdo->quote('foo', PDO::PARAM_STR); /* 'foo', as expected */
echo $pdo->quote(42, PDO::PARAM_INT); /* '42', expected 42 unquoted */
Run Code Online (Sandbox Code Playgroud)
我只是想知道这是否是预期的功能.我使用预准备语句来执行实际查询,但我正在尝试获取 创建最终查询字符串(用于调试/缓存),并且正在手动构建它们.
正如标题所示,这是$pdo使用MySQL驱动程序创建的时间.由于不可用,我没有尝试过其他人.
我已经尝试使用PHP PDO连接数据库.我有很多样品,我不确定是什么问题.
下面是我的代码
<?php
try
{
// $db = new PDO('sqlite:sampleDB.db3');
// $db = new SQLiteDatabase('sampleDB.sqlite', 0666, $error);
$db = new PDO('sqlite:sampleDB.sqlite');
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了很多方法来打开连接.请告诉我正确的方法......
我知道不同的浏览器可能有不同的上限值,但是对于给定浏览器中最大可渲染 CSS 高度/宽度的良好经验法则是什么?
例如这个技巧:
.parent{
overflow: hidden;
}
.column{
float: left;
}
.max-height{
margin-bottom: -30000px;
padding-bottom: 30000px;
}
Run Code Online (Sandbox Code Playgroud)
.parent{
overflow: hidden;
}
.column{
float: left;
}
.max-height{
margin-bottom: -30000px;
padding-bottom: 30000px;
}
Run Code Online (Sandbox Code Playgroud)
我知道这几乎是愚蠢的,但如果一个页面扩展到超过30000px,那么现在这个技巧就不起作用了。
我见过32768px在不同的地方使用过;这是因为较高的值不可靠,还是仅仅因为它是一个很好的平方数?
我注意到PHP current()和key()数组函数(像其他数组指针函数一样)通过引用获取数组参数:
mixed current(array &$ array)
每个数组都有一个指向其"current"元素的内部指针,该元素被初始化为插入到数组中的第一个元素.
的几个简单的检查后,似乎都current()和key()(不像其它阵列指针功能)由值时传递的函数的返回值接受数组参数,从而不引发错误.
我的结论是,它只是因为current()并且key()不试图移动数组指针,因此不要求通过引用传递参数(或者以一些透明,安静,隐秘的方式执行).但是,这对我来说有点担心.
任何人都可以确认这是否是预期的功能?我很乐意用它来抢夺返回数组的第一个元素/键,但是在几乎任何其他情况下发出致命错误(或严格标准警告)以传递值时,PHP似乎非常奇怪.参考参数.
功能还是错误?
例如:
error_reporting(-1);
function getArray(){
return array('a', 'b', 'c');
}
var_dump( current(getArray()) );
var_dump( key(getArray()) );
var_dump( next(getArray()) );
var_dump( prev(getArray()) );
var_dump( reset(getArray()) );
var_dump( end(getArray()) );
Run Code Online (Sandbox Code Playgroud)
结果:
string(1) "a"
int(0)
Strict standards: Only variables should be passed by reference ...
string(1) "b"
Strict standards: Only variables should …Run Code Online (Sandbox Code Playgroud) 我注意到PHP手册中存在一些不一致之处; 记录了许多核心功能签名以通过引用接受参数,但是它们按值接受参数.
我之前发布了一个更具体的问题,@ cweiske提供了一个很好的答案(参考了相关的PHP源代码)但是这些不一致似乎更加猖獗.
有许多功能受此影响(我将更新此列表作为保证;另请注意,这些测试是在error_reporting(-1)环境中完成的)
array array_replace_recursive ( array &$array , array &$array1 [, array &$... ] )$array,$array1等等,通过价值.这已得到纠正.bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC [, mixed $arg = SORT_REGULAR [, mixed $... ]]] ) $arr按值接受参数等.这应该抛出一个错误,因为如果参数不是变量,它将不会做任何事情.现在我很担心,不是因为我对文档很苛刻,而是因为我担心PHP开发人员会对这些函数的实现细节(或同样不可靠的东西)进行讨论.
我使用array_replace_recursive()例如,获取数组参数,并将其应用于包含默认值的另一个数组.我的一些代码库利用了这种不一致性,只需:
$values = array_replace_recursive(array(
'setting_1' => array(
'sub-setting_1' => '',
'sub-setting_2' …Run Code Online (Sandbox Code Playgroud) 由于PHP手册中的不一致(正如我之前发布的那样),我只是在询问一些澄清.
该函数参数页面(http://ca2.php.net/manual/en/functions.arguments.php)有以下注意事项:
注意:从PHP 5开始,默认值可以通过引用传递.
现在,我认为这只是意味着可以接受以下语法:
function foo(&$bar = null){
// ...
}
Run Code Online (Sandbox Code Playgroud)
然而,再次由于其他不一致,我想知道这是否属于其他东西.
很简单:
// turn
array('foo', 'bar', 'hello', 'world');
// into
array('foo' => 'bar', 'hello' => 'world');
Run Code Online (Sandbox Code Playgroud)
现在我正在使用:
do{
$arrayOut[current($arrayIn)] = next($arrayIn);
}while(next($arrayIn));
Run Code Online (Sandbox Code Playgroud)
我想知道如果没有中间变量,有没有办法做到这一点,$arrayOut.我可以写一个函数,但这只是一个用例,我试图保持我的脚本整洁.我只是想知道在文档中是否遗漏了一些可以达到此目的的东西.
值来自路由路径:
route/to/controller/action/key1/value1/key2/value2
Run Code Online (Sandbox Code Playgroud)
它爆炸了,最后在使用其他组件后,我就离开了 ('key1', 'value1', 'key2', 'value2', ...)
感谢大家的见解和建议.Long Ears以简洁的方式赢得了这个,当扩展到超过"1线"时,并不是非常神秘(我至少不认为)
然而,同样关于Long Ears的建议,也许我对语义精确的代码的渴望最小化了我的好处,而我正在追逐雏菊试图保持我的变量范围"无污染",用自己来解释.
引用PHP:
目前使用Closure类实现匿名函数.这是一个实现细节,不应该依赖.
现在,那说,以下检查被认为是不可靠的:
function myFunction(Closure $callback){}
if(!($callback instanceof Closure)){}
Run Code Online (Sandbox Code Playgroud)
这让我们使用is_callable().这很好,但如果一个人需要一个真正的" 封闭 ",(作为一个论点,或者说是什么),那么is_callable()就不够严格了.以下当然转储bool(true)每个:
function myFunction(){}
class MyClass{
public function __invoke(){}
}
var_dump(is_callable('myFunction'));
var_dump(is_callable(new MyClass));
Run Code Online (Sandbox Code Playgroud)
怎么样,而不依赖于Closure类(给出的是实际上是不可靠的)可以在一个严格确定一个" 封闭 "?
在我看来,我正朝着糟糕的设计方向前进.然而,尽管这个问题得到了回答,但我认为如果有人能够提出所提问题的答案,如果不是纯粹为了它的学术要素,我将不胜感激.
自PHP 5.4发布以来(前一段时间),该Closure类型不再是"实现细节",可以依赖.function f(Closure $g) { }一切都很好.
我一直在搜索这个问题而且我遇到了很多问题,但我不认为这是实际代码的问题.基本上这个代码在两个独立的线程中启动套接字服务器(登录和游戏),我基本上从非线程版本转换了这个代码,但我一直无法让这个工作用于线程.
include "socket.php";
include "dep.php";
class Server extends Thread {
public $server;
public $config;
public function __construct($type){
//$this->config = (string)$type;
$this->run2($type);
$this->run();
}
public function run(){
while(true){
$this->server->loop();
}
}
public function run2($config){
$this->server = new sokserv($config);
$this->server->init();
//while(true){
// $this->server->loop();
//}
}
}
$login = new Server('Config/config.xml');
$game = new Server("Config/config2.xml");
The error received is
Fatal error: Uncaught exception 'Exception' with message 'Serialization of 'SimpleXMLElement' is not allowed' in C:\Users\=\Desktop\Test\Start.php:19
Stack trace:
#0 C:\Users\=\Desktop\Test\Start.php(19): Server->run2()
#1 C:\Users\=\Desktop\Test\Start.php(10): Server->run2('Config/config.x...')
#2 …Run Code Online (Sandbox Code Playgroud)