Doctrine 将本地的、驱动程序特定的数据库连接资源句柄封装在其 Connection 类中。我说的是从,例如,返回的资源mysqli_connect()。我看不到任何访问原始连接资源的方法 - 我找不到任何 getter 方法。这种强封装可能暗示我不应该尝试访问和使用它,但当然,这正是我想要做的。
如果我要从同一连接发出只读选择查询,会不会引起任何问题?我不确定学说的工作流程是如何在幕后运作的。数据库连接是有状态的,我有点害怕在学说有一些多步骤事务部分正在进行时我可能会跳入并发出 sql 查询,这显然会导致问题。但是由于 php 的单线程特性,我认为它在实践中很有可能是不可能的,这取决于学说的工作方式。
旁白:我想这样做的原因是为了性能。我还有一些不是用学说编写的代码,它需要原始数据库连接,因为它使用本机 db 扩展函数。我可以只打开另一个 db 连接,但打开第二个连接在我的场景中具有显着的性能影响......这使得尝试重用学说连接非常有吸引力。
PHP有一个功能,你可以在字符串上使用增量运算符.它的行为类似于里程表,一旦你到达一个范围的末尾,它就会"滚动".
<?php
$str = 'zy';
$str++;
echo "$str\n"; // zz
$str++;
echo "$str\n"; // aaa
Run Code Online (Sandbox Code Playgroud)
只是好奇PHP源代码在哪里.我经常在函数/扩展中查看源代码,但是这样的东西我不知道在哪里看.
使用基于Web的SVN链接到该文件将非常棒.
根据其中一个手册页http://www.php.net/manual/en/language.oop5.static.php:
静态调用非静态方法会生成E_STRICT级别警告.
但是,当从类内部进行调用时,情况似乎并非如此:
error_reporting(-1);
class Test {
private $id;
function __construct($id) { $this->id = $id; }
function id() { return $this->id; }
function __toString() {
return Test::id()
. self::id()
. static::id()
. static::id()
. call_user_func('Test::id')
. call_user_func(array('Test', 'id'));
}
}
$a = new Test('a');
$b = new Test('b');
echo "$a $b $a"; # aaaaaa bbbbbb aaaaaa
var_dump(error_get_last()); # NULL
Run Code Online (Sandbox Code Playgroud)
用php 5.4测试
演示: http ://codepad.viper-7.com/IKp9iX
我相信我已证明:
id证明了这一点).编辑 -
我想补充说,在__toString调用中插入debug_backtrace()会产生一个调用"类型" -> …
我得到了一个允许用户上传图像并裁剪它的表单我已经弄清楚了它的流程
1.用户上传图片
2.服务器处理并发送回浏览器
3.用户裁剪并发送到服务器
4.服务器处理并保存
有没有其他方法可以实现这一目标?
也许使用javascript加载图像,然后裁剪它,然后发送到服务器进行处理。
有办法吗?
编辑
我希望避免将这些图像发送到服务器进行处理。
可能使用 FileReader 加载文件..
我没有运气在谷歌上搜索它
使用mysql 5.1.41和innodb
我正在做一些数据导入,但不能使用加载数据infile,所以我手动发出insert语句.我发现禁用自动提交和发出100个插入语句然后提交更快,而不是每次插入后的隐式提交.
它让我思考,我可以将多少数据放入交易中有什么限制?语句数量是否有限制,或者是否与字节大小等有关...?
我正在开发一个管理面板,显示服务器上特定位置的目录结构.我有一个递归的PHP函数,遍历每个文件和文件夹.我无法弄清楚的是如何将这个目录结构存储在php关联数组中,如下所示:
array[foldername1][0]=file; // if the foldername1 contains a file
array[foldername1][foldername2][0]=file //if foldername1 contains another folder(foldername2) along with the file.
Run Code Online (Sandbox Code Playgroud)
我想遵循的规则是; 一个文件夹应始终是一个键,文件应始终在这样的索引:
array[folder1][folder2][0]=file1;
array[folder1][folder2][1]=file2;
Run Code Online (Sandbox Code Playgroud)
填充此关联数组的函数应该是通用的,因为我们永远不知道目录结构是什么.我想json_encode这个数组回到我的客户端,并在javascript中处理它,这不是一个问题.
如果这是一个不好的方法,请让我知道,可能有更好的方法来做到这一点.我想过使用扁平阵列,但我认为这是一个糟糕的设计.
我正在使用Postman打包的应用程序+拦截器扩展。chrome似乎会Origin: chrome-extension://aicmkgpgakddgnaphhhpliifpcfhicfo自动为来自Postman的请求添加标头。我想完全删除此标头。
使用Interceptor扩展时,如果我使用常规的Postman标头选项卡输入标头的条目Origin,则我的请求将使用指定的值。因此,我可以更改标题的值。然后,我尝试将标头的值字段留空,但随后我的请求恢复为send Origin: chrome-extension://...。
我该如何与邮递员发送一个发送空白Origin标题或完全忽略它的请求?
$arrayIter = new ArrayIterator( array(1, 2) );
$iterIter = new IteratorIterator($arrayIter);
var_dump($iterIter->valid()); //false
var_dump($arrayIter->valid()); //true
Run Code Online (Sandbox Code Playgroud)
如果我先调用$ iterIter-> rewind(),则$ iterIter-> valid()为true.我很好奇为什么要调用rewind().我想它有充分的理由,但我希望它只是在内部迭代器处于的任何状态下开始迭代,并在开始迭代之前将其作为回退选项.
调用next()似乎也把它置于"有效"状态(虽然它前进到下一个位置,表明它先前处于第一个位置).
$arrayIter = new ArrayIterator(array(1,2));
$iterIter = new IteratorIterator($arrayIter);
$iterIter->next();
var_dump($iterIter->valid());
Run Code Online (Sandbox Code Playgroud)
同样,我很好奇为什么我需要调用rewind(),尽管内部迭代器处于有效状态.
我遇到一个奇怪的问题,即如果我的servlet发送200 ok http状态,它可以按预期工作,并且客户端获得预期的200状态。但是,如果我的servlet返回404状态,tomcat似乎会将其更改为403状态。如果使用http get方法,则不会发生这种情况。我没有测试put或post。
我想非常清楚地表明,我的servlets doDelete方法可以很好地执行。只是返回到浏览器的状态代码已更改。
我将提供一个最小的测试用例来说明问题。
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/api/test403/*")
public class Test403 extends HttpServlet {
public void doDelete(HttpServletRequest request, HttpServletResponse response) {
try {
String p = request.getParameter("send404");
if (p != null && "1".equals(p)) {
response.sendError(HttpServletResponse.SC_NOT_FOUND, "not found.");
} else {
response.sendError(HttpServletResponse.SC_OK, "ok.");
}
} catch (Exception e) {
e.printStackTrace();
}
}
private static final long serialVersionUID = 1L;
}
Run Code Online (Sandbox Code Playgroud)
然后我通过以下网址进行测试
myproject/api/test403?send404=1
myproject/api/test403?send404=0
Run Code Online (Sandbox Code Playgroud)
是什么导致这种现象?我对整个servlet /容器架构不太熟悉。我只在使用tomcat 7.0.41的1台服务器上遇到此问题。我尝试了另一台服务器,但没有出现这种现象。
编辑-根据请求,这是chrome网络面板中的一些输出。我使用ajax发起了此特定请求: …
以下代码
$t = 1 – (1 - 2);
Run Code Online (Sandbox Code Playgroud)
收益率:
Parse error: syntax error, unexpected T_STRING on line 3 在php 5.2.3和5.4中我得到了 Parse error: in <file> on line 3
对我而言,似乎我正在从另一个表达式中减去一个表达式,我认为这是合法的.为什么这是一个解析错误?