我正在研究一个Javascript/jQuery驱动的图像预加载器,并且遇到了一些障碍.虽然目前它提供了基于的进展loaded_images / total_images,但这不是非常准确,因为一个页面可能有一千个1kB图像和一个1MB图像.
我正在寻找一种方法将文件大小合并到进度计算中.现在,我已经研究了捕获给定图像的文件大小的一些(跨浏览器兼容)技巧,并且似乎Ajax请求Content-Length是最可靠的(就准确性而言)如下:
var imageSizeTotal = 0;
var ajaxReqest = $.ajax({
type: 'HEAD',
url: 'path/to/image',
success: function(message){
imageSizeTotal += parseInt(ajaxRequest.getResponseHeader('Content-Length'));
}
});
Run Code Online (Sandbox Code Playgroud)
现在,我发现这种方法非常有用,因为我可以在发生必要的请求时提供初始化的状态消息.不过我的问题现在有两个方面:
setInterval()用于定期检查?否则,我会回到挂在大文件上的进度指示器的问题.此外,这是我当前使用的脚本,它再次根据图像数量计算进度,而不管文件大小或接收的字节数.
var preloaderTotal = 0;
var preloaderLoaded = 0;
var preloaderCurrent = null;
$('#preloaderCurtain')
.bind('preloaderStart', function(){
$(this)
.show();
$('*')
.filter(function(e){
if($(this).css('background-image') != 'none'){
preloaderTotal++;
return true;
}
})
.each(function(index){
preloaderCurrent = new Image();
preloaderCurrent.src = $(this).css('background-image').slice(5, -2);
preloaderCurrent.onload = function(e){
preloaderLoaded++;
if(preloaderLoaded == preloaderTotal …Run Code Online (Sandbox Code Playgroud) 不确定这是否可行,但现在已成为一场学术斗争.
使用__halt_compiler()技巧在一个PHP文件中嵌入二进制数据,我已经成功地创建了自开幕脚本将fseek()到__COMPILER_HALT_OFFSET__(不是太难看,因为这精确的例子在手册中进行了说明)
不管怎么说,我已经存储的二进制数据ZIP的小疙瘩(包含一个单一的文件,上面写着"Hello World"的一个文件夹我的电话后)__halt_compiler()
我试图做的是将数据直接复制到php://temp流,并成功完成(如果我rewind()和passthru()临时流句柄,它转储数据)
$php = fopen(__FILE__, 'rb');
$tmp = fopen('php://temp', 'r+b');
fseek($php, __COMPILER_HALT_OFFSET__);
stream_copy_to_stream($php, $tmp);
Run Code Online (Sandbox Code Playgroud)
我的问题带有试图打开现在php://temp1与zip_open()
$zip = zip_open('php://temp');
Run Code Online (Sandbox Code Playgroud)
1从我所看到的(尽管缺乏其他诸如缺乏流支持的可能性
zip_open()),这里的问题是句柄中数据php://memory和php://temp流之间固有的非永久性.如果这可以解决,也许事实上可能.
它不断踢回错误代码11,我发现没有2个文档(看起来像大多数其他可能的错误代码)
var_dump($zip); // int(11)
Run Code Online (Sandbox Code Playgroud)
2正如@cweiske所指出的,错误代码
11 = ZipArchive::ER_OPEN,无法打开文件
这是我尝试使用php://temp流或其他可能问题的结果吗?我也知道存在一种OOP方法(ZipArchive等人),但我想我会从基础开始.
有任何想法吗?
快一点; 我知道一个解决方案,但如果它存在,我正在寻找更优雅的东西.
我正在使用PDO进行预先准备的声明:
$sql = "INSERT INTO my_table (foo, bar, baz) VALUES (:foo, :bar, :baz)";
$source->execute($sql, array(
':foo' => $foo,
':bar' => $bar,
':baz' => $baz,
));
Run Code Online (Sandbox Code Playgroud)
这很好,但我想传入一个先前创建的数组,但是包含的键没有冒号(:)的前缀,我认为必须有一个优雅的方式:
$array = array(
'foo' => 'some',
'bar' => 'random',
'baz' => 'value',
);
Run Code Online (Sandbox Code Playgroud)
并将其翻译成:
$array = array(
':foo' => 'some',
':bar' => 'random',
':baz' => 'value',
);
Run Code Online (Sandbox Code Playgroud)
没有做:
$temp = array();
foreach($array as $key => $value){
$temp[':' . $key] = $value;
}
$array = $temp;
Run Code Online (Sandbox Code Playgroud)
我浏览过PHP文档,但是我找不到适合此目的的函数(或序列).
有任何想法吗?
序言:
我所追求的是; 如果方法调用该get_typed_ancestor()方法,则执行所需操作所需的类名get_typed_ancestor()是定义调用方法的类的名称.
传递$this提取类名失败,因为它将解析为具体类.如果调用方法是在层次结构中定义的抽象类中定义的,而不是实例所在的具体类,则会得到不正确的类名.
instanceof static由于与上述相同的原因寻找失败.
如下所述,捕获定义方法的类名的目的是,get_typed_ancestor()可以找到从定义调用方法的类派生的任何类的实例,而不仅仅是启动的具体类的另一个实例调用堆栈(因此$this和static不能令人满意)
到目前为止,传递__CLASS__到get_typed_ancestor()似乎在是唯一的解决方案迄今,作为__CLASS__将妥善解决在其中定义调用方法的类名,而不是实例调用调用方法的类名.
注意:
我在这个问题的最后列出了一个显示工作__CLASS__论证方法和失败static方法的例子.如果你想要刺,也许可以用它作为开始.
问题:
我已经看到几个"解决方案"围绕着杠杆debug_backtrace()来捕获给定方法或函数的调用类; 然而,就我而言,这些(正如我的引号可能暗示的那样)并不完全是解决方案,因为debug_backtrace()这种方式使用的是黑客.
抛开一边,如果这个黑客是唯一的答案,那么我将会破解.
无论如何; 我正在研究一组在底部到顶部可遍历树中充当节点的类.这是一个类层次结构,简化为简洁:
abstract class AbstractNode{}
abstract class AbstractComplexNode extends AbstractNode{}
class SimpleNode extends AbstractNode{}
class ComplexNodeOne extends AbstractComplexNode{}
class ComplexNodeTwo extends AbstractComplexNode{}
Run Code Online (Sandbox Code Playgroud)
节点可以具有任何具体节点(或null)作为父节点.看AbstractNode:
abstract class …Run Code Online (Sandbox Code Playgroud) 我在根元素上创建了一个key/keyref以根据指定的元素创建文档范围的唯一性。
因此,via所有实例中的.//foo/@name每一次出现@name都foo必须是唯一的;同样对于.//bar/@name. 这似乎工作正常。它们分别由.//foo-ref/@name-ref和引用.//bar-ref/@name-ref,也在根节点上定义。
但是,我发现无法创建可选密钥,这带来了一些问题。从语义上讲,由于符合文档的性质,并不是每个foo或实例都需要密钥bar。的实例foo-ref/@name-ref显然需要针对现有的foo/@name,但如果 afoo没有 a ,它在语义上并不是无效的@name。
有什么解决方法吗?我不喜欢消费者必须为每个元素定义一个键的想法,而合理地只有少数人需要它们。
这是示例模式(当然,我没有部署一些foobar模式,但结构是相同的;这只是我一直在玩的测试模式)
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="ref">
<xs:attribute name="name-ref" type="xs:string" use="required" />
</xs:complexType>
<xs:complexType name="obj">
<xs:attribute name="name" type="xs:string" use="optional" />
</xs:complexType>
<xs:complexType name="foo">
<xs:complexContent>
<xs:extension base="obj">
<xs:sequence>
<xs:choice maxOccurs="unbounded">
<xs:element name="foo" type="foo" />
<xs:element name="bar" type="bar" /> …Run Code Online (Sandbox Code Playgroud) 我一直在阅读有关PHP从SPL常用的接口,如Iterator,Countable和ArrayAccess.但是,我不确切地知道它们是如何工作的.
他们的实现是否修改了PHP的核心功能,例如重载[]数组运算符?
我还读过有关Operator扩展的内容,它提供了以与低级语言相同的方式重载其他运算符的能力.由于Operator扩展明确地修改了PHP核心,我想知道ArrayAccess幕后是否采取相同的行动?
我是一个修补匠,因此我发现很难在不知道引擎盖的情况下使用它.
我已经尝试使用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)
我已经尝试了很多方法来打开连接.请告诉我正确的方法......
很简单; 我已经阅读了文档,但也许我只是对解释感到困惑.
class Test{
public static $var = 'world';
}
echo "hello {Test::$var}"; // only parses $var in current scope, which is empty
Run Code Online (Sandbox Code Playgroud)
有没有办法在这里实现所需的功能?我开始猜不到,因为我已经尝试了一些没有成功的排列.
澄清:我正在尝试使用PHP的变量解析来实现这一点,而不是连接.显然,如果不可能使用所需的方法,我会求助于连接,尽管我希望它是.
快速规格:
PHP 5.3
error_reporting(-1) // the highest
Run Code Online (Sandbox Code Playgroud)
我正在使用__get()引用技巧来神奇地访问对象中任意深度的数组元素.
快速举例:
public function &__get($key){
return isset($this->_data[$key])
? $this->_data[$key]
: null;
}
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为$key没有设置,它试图null通过引用返回,当然抛出Only variable references should be returned by reference ...我尝试修改它如下:
public function &__get($key){
$null = null;
return isset($this->_data[$key])
? $this->_data[$key]
: $null;
}
Run Code Online (Sandbox Code Playgroud)
仍然没有工作,虽然,我假设设置$null到null实质上unset()这样.
我能做什么?谢谢!
刚想我会推广这个问题,因为它有点相关(PHP魔术和参考); __callStatic(),call_user_func_array(),引用和PHP 5.3.1.我还没有找到答案...除了修改PHP核心.
我知道不同的浏览器可能有不同的上限值,但是对于给定浏览器中最大可渲染 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在不同的地方使用过;这是因为较高的值不可靠,还是仅仅因为它是一个很好的平方数?