当前位置: 首页 > 知识库问答 >
问题:

PHP警告消息:Count():参数必须是一个数组或一个实现可数[重复]的对象

荆鸿畅
2023-03-14

如果单击某个链接查看证书列表,则会出现错误。在某些系统中,它工作正常。我使用相同的代码测试了大约3-4个系统。它工作正常,但在一个系统中,它不工作。

这是我在计数时遇到问题的代码

<?php

    if (count(@$certificate_attachments)>0) {
        foreach ($certificate_attachments as $cert_key => $cert_val) {
            if ((strpos($cert_val, ".png")) || (strpos($cert_val, ".jpg")) || (strpos($cert_val, ".jpeg"))) {
                ?>
        <div class="col-md-3">
            <a href="<?php echo ATTACHMENTS_PATH; ?>certificates/<?php echo $profileInfo['email_id']; ?>/<?php echo $cert_val; ?>" title="Certificates" class="thickbox ">
                <img height="100" width="100" class="certif" src="<?php echo ATTACHMENTS_PATH; ?>certificates/<?php echo $profileInfo['email_id']; ?>/<?php echo $cert_val; ?>" />
            </a>
        </div>
    <?php
            } else {
                ?>
        <div class="col-md-3">
            <a href="#TB_inline?height=800&width=500&inlineId=pdfContent<?php echo $cert_key; ?>" title="" class="thickbox">
                <img height="100" width="100" src="<?php echo $this->config->item('img_path_portal_doctor'); ?>pdf-icon.png" class="">
            </a>
        </div>
        <div id="pdfContent<?php echo $cert_key; ?>" style="display: none;">
            <p>
                <object type="application/pdf" width="600" height="500" frame-resize data="<?php echo ATTACHMENTS_PATH; ?>certificates/<?php echo $profileInfo['email_id']; ?>/<?php echo $cert_val; ?>">
                <embed src="<?php echo ATTACHMENTS_PATH; ?>certificates/<?php echo $profileInfo['email_id']; ?>/<?php echo $cert_val; ?>" type="application/pdf" />
                </object>

            </p>
        </div>
    <?php
            }
        }
    } else {
        ?>
        Not provided any Certificates.
    <?php
    }
    ?>
</div>

获取此错误:

遇到一个PHP错误

严重性:警告

Message:count():参数必须是数组或实现可计数的对象

文件名:doctor/profile.php

电话号码:533

但它工作在良好的系统中,我正在使用相同的代码在另外2-3个系统中工作和测试,它也工作良好,但当客户机运行此代码时,它在客户机系统中遇到了这个问题。

共有1个答案

杨凯旋
2023-03-14

正如其他人所指出的,请不要使用@,它实际上是一个错误抑制操作符,它会隐藏像这样的错误。因为从原始代码中删除@会导致“undefined variable”变量警告。我建议您追溯到定义变量$certificate\u attachments的位置,并检查它是如何定义的。它可能被定义在范围之外,可能是一个条件语句,它可以解释为什么它与某些系统而不是其他系统一起工作。下面是一个超出范围的简单示例;

// pseudo code to demonstrate out of scope

$results = data_queried_from_database_or_something();

if(!empty($results)) {
    // define attachments only if we get results
    $certificate_attachments = $results;
}
// For systems that have no attachments, calling $certificate_attachments
// will result in "undefined variable" error message

与其使用@符号抑制错误,不如在count()之前进行类型检查

// ensure that the variable is an array and that it has values in it.
if(is_array($certificate_attachments) && count($certificate_attachments) > 0) 
{
    // your code goes here
}

查看定义$certificate_attachments的代码以及了解代码成功运行和失败的不同情况会很有帮助。

 类似资料: