首页 > 解决方案 > PHP 警告:file_put_contents() 无法打开流:是目录

问题描述

我已经搜索和搜索,但找不到像我正在经历的例子,一切正常,但只是想摆脱这一位在我的日志中抛出的所有警告:

$propertyData = $propertyDetail->data;
$displayAddress = $propertyData->display_address;

if ( $displayAddress != "" ) {
    file_put_contents( $this->tmpDirectory."/slugs/".sanitize_title( $displayAddress ), $propertyData->property_id );
}

$displayAddress 是从 API 调用中提取的,它返回并基于它创建必要的文件,截图https://share.getcloudapp.com/2Nuyklxd(正常工作)

然而,我的日志充满了这些:

PHP Warning: file_put_contents(/kunder/qzgb_2535/contem_4144/public/wp-real-estate-7/elementor-three-demo/wp-content/cache/idx_temp/slugs/): failed to open stream: Is a directory in /kunder/qzgb_2535/contem_4144/public/wp-real-estate-7/elementor-three-demo/wp-content/plugins/ct-idx-pro/classes/IDX.php on line 390

我意识到“无法打开流:是一个目录”这让我相信使用变量作为文件名存在问题,还是我遗漏了一些简单的东西?

感谢任何帮助或指导,谢谢!

标签: phpapivariableswarningsfile-put-contents

解决方案


对于任何感兴趣的人,我通过删除正在工作但 file_put_contents() 不是 100% 喜欢输出的 sanatize_title() 函数来修复它,这是更新的:

$propertyData = $propertyDetail->data;
$displayAddress = $propertyData->display_address;

if ( $displayAddress != "") {
    $displayAddress = strtolower($displayAddress);
    $displayAddress = preg_replace("/[^a-z0-9_\s-]/", "", $displayAddress);
    $displayAddress = preg_replace("/[\s-]+/", " ", $displayAddress);
    $displayAddress = preg_replace("/[\s_]/", "-", $displayAddress);

    file_put_contents( $this->tmpDirectory . "/slugs/" . $displayAddress, $propertyData->property_id );
}

推荐阅读