使用 laravel 4.2 调用控制器外部的 php 函数

Posted

技术标签:

【中文标题】使用 laravel 4.2 调用控制器外部的 php 函数【英文标题】:calling a php function that is outside the controller using laravel 4.2 【发布时间】:2016-11-09 09:04:17 【问题描述】:

所以我有这个函数来获取我的 Laravel 项目所在的剩余内存。问题是有两个控制器需要检查剩余内存。

这是它在我的控制器内部的样子

private function convGB($bytes, $unit = "", $decimals = 2)

     $units = array('B' => 0, 'KB' => 1, 'MB' => 2, 'GB' => 3, 'TB' => 4, 
     'PB' => 5, 'EB' => 6, 'ZB' => 7, 'YB' => 8);

     $value = 0;
     if ($bytes > 0) 
     
         if (!array_key_exists($unit, $units)) 
         
             $pow = floor(log($bytes)/log(1024));
             $unit = array_search($pow, $units);
         

         $value = ($bytes/pow(1024,floor($units[$unit])));
     

     if (!is_numeric($decimals) || $decimals < 0) 
     $decimals = 2;
     

     return sprintf('%.' . $decimals . 'f '.$unit, $value);


private function getMem()

    $ds  = disk_total_space(substr(base_path(), 0, 2));
    $fs  = disk_free_space(substr(base_path(), 0, 2));
    $ffs = disk_free_space(substr(base_path(), 0, 2));

    if ($ds >= 1073741824)
    
        $ds = number_format($ds / 1073741824, 2) . ' GB';
    
    elseif ($ds >= 1048576)
    
        $ds = number_format($ds / 1048576, 2) . ' MB';
    
    elseif ($ds >= 1024)
    
        $ds = number_format($ds / 1024, 2) . ' KB';
    
    elseif ($ds > 1)
    
        $ds = $ds . ' B';
    
    elseif ($ds == 1)
    
        $ds = $ds . ' B';
    
    else
    
        $ds = '0 size';
    

    if ($fs >= 1073741824)
    
        $fs = number_format($fs / 1073741824, 2) . ' GB';
    
    elseif ($fs >= 1048576)
    
        $fs = number_format($fs / 1048576, 2) . ' MB';
    
    elseif ($fs >= 1024)
    
        $fs = number_format($fs / 1024, 2) . ' KB';
    
    elseif ($fs > 1)
    
        $fs = $fs . ' B';
    
    elseif ($fs == 1)
    
        $fs = $fs . ' B';
    
    else
    
        $fs = '0 size';
    

    $converted = $this->convGB($ffs);

    return array( $ds , $fs , $converted);

所以我想把这个函数放在一个外部 php 中,这样我就可以在需要时调用它。关于如何做到这一点的任何想法?非常感谢!

【问题讨论】:

那么你要移动哪个函数呢?我在您的代码示例中看到了两个。 嗨,我只使用getMem函数 【参考方案1】:

在您的 app/Helpers 目录中创建一个新文件,将其命名为 AnythingHelper.php 我的助手的示例是:

<?php
function getDomesticCities()

$result = \App\Package::where('type', '=', 'domestic')
    ->groupBy('from_city')
    ->get(['from_city']);

return $result;

通过以下命令为您的助手生成服务提供者

php artisan make:provider HelperServiceProvider

在你新生成的HelperServiceProvider.php的注册函数中添加如下代码

require base_path().'/app/Helpers/AnythingHelper.php';

现在在你的 config/app.php 中加载这个服务提供者,你就完成了

'App\Providers\HelperServiceProvider',

代码取自这里:How do I make global helper functions in laravel 5?

【讨论】:

以上是关于使用 laravel 4.2 调用控制器外部的 php 函数的主要内容,如果未能解决你的问题,请参考以下文章

减少对外部 API 的身份验证调用(Laravel 5.6)

Laravel 4.2 Illuminate Facade 没有得到解决

从 4.1 升级到 4.2 后 Laravel 控制器路由中断

如何从 laravel 控制器执行外部 shell 命令?

Laravel 4.2 走错路了

Laravel 4.2 jquery 对象到控制器