小编Dan*_*ugg的帖子

通过Javascript/jQuery接收的字节数和字节总数

我正在研究一个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)

现在,我发现这种方法非常有用,因为我可以在发生必要的请求时提供初始化的状态消息.不过我的问题现在有两个方面:

  1. 有没有办法捕获给定图像对象加载的字节,可能setInterval()用于定期检查?否则,我会回到挂在大文件上的进度指示器的问题.
  2. 如何强制脚本的实际进度计算器等部分等待必要的Ajax请求完成(显示正在初始化或其他),以便它可以继续加载?

此外,这是我当前使用的脚本,它再次根据图像数量计算进度,而不管文件大小或接收的字节数.

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)

javascript ajax jquery image preloader

6
推荐指数
1
解决办法
5679
查看次数

PHP zip_open()和php:// temp,似乎无法打开

不确定这是否可行,但现在已成为一场学术斗争.

使用__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://temp1zip_open()

$zip = zip_open('php://temp');
Run Code Online (Sandbox Code Playgroud)

1从我所看到的(尽管缺乏其他诸如缺乏流支持的可能性zip_open()),这里的问题是句柄中数据php://memoryphp://temp流之间固有的非永久性.如果这可以解决,也许事实上可能.

它不断踢回错误代码11,我发现没有2个文档(看起来像大多数其他可能的错误代码)

var_dump($zip); // int(11)
Run Code Online (Sandbox Code Playgroud)

2正如@cweiske所指出的,错误代码11 = ZipArchive::ER_OPEN,无法打开文件

这是我尝试使用php://temp流或其他可能问题的结果吗?我也知道存在一种OOP方法(ZipArchive等人),但我想我会从基础开始.

有任何想法吗?

php zip stream

6
推荐指数
1
解决办法
2462
查看次数

在PHP中使用字符串(:)前缀数组键

快一点; 我知道一个解决方案,但如果它存在,我正在寻找更优雅的东西.

我正在使用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文档,但是我找不到适合此目的的函数(或序列).

有任何想法吗?


附录 …

php arrays key

6
推荐指数
1
解决办法
2446
查看次数

在PHP中捕获调用类的层次结构

序言:

我所追求的是; 如果方法调用该get_typed_ancestor()方法,则执行所需操作所需的类名get_typed_ancestor()定义调用方法的类的名称.

传递$this提取类名失败,因为它将解析为具体类.如果调用方法是在层次结构中定义的抽象类中定义的,而不是实例所在的具体类,则会得到不正确的类名.

instanceof static由于与上述相同的原因寻找失败.

如下所述,捕获定义方法的类名的目的是,get_typed_ancestor()可以找到从定义调用方法的类派生的任何类的实例,而不仅仅是启动的具体类的另一个实例调用堆栈(因此$thisstatic不能令人满意)

到目前为止,传递__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)

php oop inheritance class

6
推荐指数
1
解决办法
563
查看次数

XSD 中的可选键

我在根元素上创建了一个key/keyref以根据指定的元素创建文档范围的唯一性。

因此,via所有实例中的.//foo/@name每一次出现@namefoo必须是唯一的;同样对于.//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)

xsd key

6
推荐指数
1
解决办法
943
查看次数

ArrayAccess如何工作?

我一直在阅读有关PHP从SPL常用的接口,如Iterator,CountableArrayAccess.但是,我不确切地知道它们是如何工作的.

他们的实现是否修改了PHP的核心功能,例如重载[]数组运算符?

我还读过有关Operator扩展的内容,它提供了以与低级语言相同的方式重载其他运算符的能力.由于Operator扩展明确地修改了PHP核心,我想知道ArrayAccess幕后是否采取相同的行动?

我是一个修补匠,因此我发现很难在不知道引擎盖的情况下使用它.

php spl php-extension

5
推荐指数
1
解决办法
511
查看次数

如何使用PHP连接sqlite数据库?

我已经尝试使用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)

我已经尝试了很多方法来打开连接.请告诉我正确的方法......

php sqlite pdo

5
推荐指数
2
解决办法
2万
查看次数

PHP中的静态变量字符串解析

很简单; 我已经阅读了文档,但也许我只是对解释感到困惑.

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 string variables parsing

5
推荐指数
1
解决办法
3755
查看次数

通过__get()通过引用返回null

快速规格:

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)

仍然没有工作,虽然,我假设设置$nullnull实质上unset()这样.

我能做什么?谢谢!


刚想我会推广这个问题,因为它有点相关(PHP魔术和参考); __callStatic(),call_user_func_array(),引用和PHP 5.3.1.我还没有找到答案...除了修改PHP核心.

php null reference magic-methods

5
推荐指数
1
解决办法
1562
查看次数

CSS 允许的最大高度(以像素为单位)

我知道不同的浏览器可能有不同的上限值,但是对于给定浏览器中最大可渲染 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在不同的地方使用过;这是因为较高的值不可靠,还是仅仅因为它是一个很好的平方数?

css size pixel cross-browser

5
推荐指数
1
解决办法
1280
查看次数