PHP readfile或file_获取循环中的内容

PHP readfile或file_获取循环中的内容,php,file-get-contents,readfile,Php,File Get Contents,Readfile,可能还有其他方法可以做到这一点,但我正在寻找一个相当简单的设置,因为它基本上是一个一次性的过程 我有50个州目录,每个目录中都有一些txt文件 我想进入每个目录,“读取”每个文件(然后插入每个文件的mysql) 我尝试了一些变体,但每次我尝试循环使用readfile或file\u get\u内容时,它会在第一个文件之后中断,并且我无法打开流:列表其余部分的错误 我已经搜索了在循环中使用这些函数的陷阱,期望有很多原因不这样做,但没有得到答案 谢谢 回来添加示例代码-我看到这里列出了一个答案,所以我

可能还有其他方法可以做到这一点,但我正在寻找一个相当简单的设置,因为它基本上是一个一次性的过程

我有50个州目录,每个目录中都有一些txt文件

我想进入每个目录,“读取”每个文件(然后插入每个文件的mysql)

我尝试了一些变体,但每次我尝试循环使用readfile或file\u get\u内容时,它会在第一个文件之后中断,并且我无法打开流:列表其余部分的错误

我已经搜索了在循环中使用这些函数的陷阱,期望有很多原因不这样做,但没有得到答案

谢谢 回来添加示例代码-我看到这里列出了一个答案,所以我也会检查一下。(这些都不是我的,我只是找到了一个函数来捕获文件列表)

函数listFilesInDir($start\u dir) { /* 返回$start_dir中的文件数组(非递归) */ $files=array(); $dir=opendir($start\u dir); while(($myfile=readdir($dir))!==false) { 如果($myfile!='.&&$myfile!='..')) { $files[]=$myfile; } } closedir($dir); 返回$files; } $dir='path/to/files'; $Docs=listFilesInDir($dir); foreach($key=>$fileName形式的文档) { //这里是我尝试获取文件内容的地方 $content=file\u get\u contents($fileName); //即使做一个回音作为测试也会在第一个文件之后破坏它 echo$内容; //最终,我只需要为mysql插入到这里 }
下面的一些变化是我将使用的。YMMV取决于你在做什么。如果您发布代码,我们可以解决您的具体实现问题,而不仅仅是提供替代解决方案:-)


谢谢这个解决办法奏效了。除了插入我的路径之外,没有其他必要的改变。。。我将添加我的插入代码。我想,只是出于我自己的教育目的,我看到$file->getPathname();DirectoryIterator是php5中添加的有用的SPL类之一。
getPathname
方法为您提供问题文件或目录的完整文件系统路径
getFilename
为您提供jsut文件/dir名称,
getPath
将为您提供文件/dir的路径。另外,如果你使用这个作为你的解决方案,你能把它标记为答案吗?或者你在等待更多关于你的代码不起作用的技术细节吗?是的,我可以把它标记为答案-对SO系统来说是相当新的,所以我不确定它是如何起作用的。(很抱歉我的回复延迟了,我没有收到任何活动的电子邮件通知)如果有人想添加一些信息,说明另一种方法失败的原因,我会发现它很有用,但我不会将此作为未答复而公开。再次感谢您,我经常需要这些类型的答案用于各种项目,我发现堆栈溢出非常有用。我很少使用
readdir
,但我认为这可能是您的
$files
数组中的值之一的问题。我怀疑如果你把它扔掉,你会看到意想不到的事情。或者可能是错误实际上发生在
readdir
调用中,这是dir/文件上的perms问题。通常,如果我没有使用spl,我会使用
glob('/path/to/files/*.txt')
来获取文件数组。一般来说,除非我处理大量的数据,否则我会尽量避免直接操作
resource
类型的函数。 function listFilesInDir($start_dir) { /* returns an array of files in $start_dir (not recursive) */ $files = array(); $dir = opendir($start_dir); while(($myfile = readdir($dir)) !== false) { if($myfile != '.' && $myfile != '..') { $files[] = $myfile; } } closedir($dir); return $files; } $dir = 'path/to/files'; $Docs = listFilesInDir($dir); foreach($Docs as $key => $fileName) { // HERE IS WHERE I TRIED THE file_get_contents $content = file_get_contents($fileName); //even doing an echo as a test would break it after the first file echo $content; //ultimately I would just do INSERT INTO here for mysql }
$dir = new DirectoryIterator('/path/to/states');
foreach($dir as $file)
{
  if(!$file->isDot() && $file->isFile() && strpos($file->getFilename(), '.txt') !== false)
  {
     $content = file_get_contents($file->getPathname());
     if($content)
     {
        // do your insert code
     }
  }
}