【问题标题】:Rename using a part file name使用零件文件名重命名
【发布时间】:2014-07-20 01:08:21
【问题描述】:

请多多包涵,因为我的编程知识非常有限(有些人会说这很危险。我深入研究了用于小型工作的奇怪 PHP 脚本。

现在我刚刚安装了一个 IP 摄像机,它可以输出快照文件,例如:

192.168.0.108_01_20140718125232_TIMING.jpg
192.168.0.108_01_20140720123838_TIMING.jpg
192.168.0.108_01_20140718135321_TIMING.jpg 

以此类推,每 15 分钟左右生成一次。

现在你可以看到大部分文件名是相同的,但每个快照的时间都被修改了,我无法在相机中更改。

我需要一个简单的 PHP 脚本来根据部分稳定文件名找到其中一个快照(实际上任何人,因为在任何时候文件夹中只会有一个)并将其重命名为:

IBAYOFPL32.jpg   

因此,来自相机的下一张长格式图像将被重命名,并且 IBAYOFPL32.jpg 将被新图像覆盖。所以我也需要脚本循环,这样整个事情就可以自己完成了。

我一直在寻找类似的脚本,实际上可以将长文件名重命名为我想要的,但是您必须拥有长版本的完整正确文件名才能使其在文件名更改时运行时间。

我真的希望这一切都有意义,如果不是,请告诉我。

我正在使用:Apache 版本 2.2.25 PHP 版本 5.2.17

创建图像的服务器目录是:

/home/blue19/public_html/cams

希望有人能指出正确的方向。

【问题讨论】:

  • 如果文件夹中只有一个文件夹,相机是否会删除任何其他文件夹,如果是这样,我假设您需要更改其他名称才能查看它,您可以让它工作使用 htaccess。可能值得添加为什么需要使用该名称的原因,因为您可能会找到一个并非基于您认为可能的唯一方式的解决方案。
  • 不,相机只是在指定的时间间隔内不断添加每个快照,我将其更改为的文件名必须是另一个读取该目录以获取下一张图像的网站,并且它总是寻找 www.blue19.com/cams/IBAYOFPL32.jpg
  • 是的,你说得对,解决方案可能与我认为可行的方案大不相同,我愿意接受建议 :-)
  • 好吧,如果您只需要在请求 IBAYOFPL32.jpg 时显示的最新图像,您就不需要 cron 作业来做您想做的事情

标签: php


【解决方案1】:

您说图像每 15 分钟更改一次,因此您必须每 15 分钟重命名一次,这意味着重命名它的脚本应该每 15 分钟自动执行一次。这可以通过 Cron Tab 完成。

重命名部分: 将此 php 文件放在 cams 文件夹之外:

    <?php
    Func_rename('IBAYOFPL32.jpg');

    function Func_rename($renametothis)
    {
    $dir='cams';
    $file = scandir($dir);
    $screenshotname=$file[2]; //assuming there is only screenshot in the cams folder (even if there are more than one, it will find the one in alphabetic as well as numeric order)
    rename ($dir.'/'.$screenshotname,$dir.'/'.$renametothis);
    }
    ?>

【讨论】:

  • 我从 user1735921 运行上述代码并返回:致命错误:无法在第 13 行的 /home/blue19/public_html/file.php 中重新声明 rename()
  • Re://假设cams文件夹中只有截图(即使有多个,也会按字母顺序查找),长文件名只是时间值不同数字不是Alpha
  • 它也会检查数值。我已经更新了代码,这将起作用并且可以做到。
  • 对不起,我没有看到评论中提到它也会寻找数字序列的部分。 :-)
  • 我刚刚再次运行它,它现在似乎可以工作了....我会做更多的测试并随时通知您。
【解决方案2】:
$name = 'IBAYOFPL32.jpg';
if ($data = glob('/home/blue19/public_html/cams/*_TIMING.jpg'))
{
    arsort($data); // order by timestamp, most recent image goes first
    unlink($name); // delete old IBAYOFPL32.jpg
    rename(array_unshift($data), $name); // rename most recent image to IBAYOFPL32.jpg
    while ($file = array_unshift($data)) unlink($file); // delete other images, we don't need them anyway do we?
}

【讨论】:

  • 你能不能把它做成一个可以为我运行的脚本我试过
  • user1735921 脚本工作正常,但无法通过 CRON 运行:分钟小时日月工作日命令操作 * * * * * /home/blue19/public_html/file.php > /dev/null 我只是每分钟运行一次以查看它是否有效,但它不会通过 CRON 更改文件名,而是通过 WWW 更改文件名。
  • 你不能通过提供这样的文件名从控制台运行PHP,你必须使用php /home/blue19/public_html/file.php
  • 啊,谢谢,这是一个快速的学习曲线,感谢您的提示。
  • 它的工作就像我想要的那样!完美,再次感谢你们的帮助:-)
猜你喜欢
  • 2016-05-29
  • 2012-06-20
  • 2013-08-24
  • 2016-01-18
  • 2022-11-25
  • 2014-06-07
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
相关资源
最近更新 更多