php调用Linux驱动,通过Linux上的Php计数共享Windows驱动器上的文...

这篇博客介绍了如何使用PHP处理SMB共享,特别是通过munkie/samba库来访问网络共享,并使用Symfony Finder组件或正则表达式搜索msg文件。文章强调了在不实际挂载共享的情况下,如何遍历文件并计数,同时提到了性能考虑和不同的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

您不能像这样处理手柄.如果它是popen返回的实际资源,则实际上您正在尝试尝试遍历Resource(12)/ *.msg(这意味着smbclient :: __ toString()将需要返回protocol:// username:password @ host / the / share / url,并且需要自动注册协议的流包装).

但是即使那样,它也不会起作用,因为glob仅适用于文件系统中存在的事物(因此实际上需要将其挂载)……SPL的GlobIterator似乎也是如此.

至少,您需要遍历每个文件并根据您的模式检查名称.因此,请记住,根据网络连接和共享上文件/目录的数量,此时任何解决方案都将变慢.

由于我不知道您正在使用的smb客户端的代码,您使用的不适,请举一个我确实知道如何使用的示例,它可以工作. munkie/samba是一个PHP SMB客户端,是系统smbclient的相应流包装器,因此您将需要使用与流一起使用的文件系统功能来利用它:

仅使用PHP(和应该内置的SPL)

使用SPL iterators,我们可以简化递归读取目录并搜索文件名的工作:

// assuming you installed via composer so use its autoloder

$autoloader = require_once('vendor/autoload.php');

use Samba\SambaStreamWrapper;

SambaStreamWrapper::register();

$dir = new RecusrsiveDirectoryIterator(new DirectoryIterator(

'smb://username:password@192.168.10.14/reservations'

));

$finder = new RegexIterator($dir, '#^.+\.msg$#i', RecursiveRegexIterator::MATCH);

$count = 0;

foreach($finder as $match) {

$count++;

}

echo $count;

使用非常方便的symfony / finder组件

symfony/finder component使我们的工作变得更轻松,并且隐秘性降低.除了支持glob和正则表达式搜索模式外,它还实现了Countable,因此我们可以调用$var-> count()来获取计数,而不是循环遍历结果并手动对其进行计数(尽管在内部它仍然需要遍历结果以计数).它还使更复杂的搜索更易于使用.听起来现在还不是您需要的支持,但是稍后可能会出现:

// assuming you installed via composer so use its autoloder

$autoloader = require_once('vendor/autoload.php');

use Samba\SambaStreamWrapper;

use Symfony\Component\Finder\Finder;

SambaStreamWrapper::register();

$finder = new Finder();

$finder

->files()

->name('*.msg')

->in('smb://username:password@192.168.10.14/reservations');

// YAY Countable!

echo $finder->count();

您在这里的另一种选择是实际安装共享,然后使用glob(),GlobIterator或symfony / finder.但是,这可能会有些棘手,具体取决于您将其用作什么的性质以及您打算如何进行安装… Its been delved into a bit here.

最后,如果这些是邮箱中的电子邮件,则最好使用邮箱库/组件(如Zend_Mail)连接并计算邮件,这会更好.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值