无法打开本地文件,但文件在那里

时间:2016-11-23 15:47:25

标签: php linux laravel ubuntu

我创建了一个php artisan命令,并以bheng用户

执行
php /home/forge/site.com/artisan products:exportdiff --env=production

将文件导出到我的/files/product-exports/目录

另外,我已经做过

chmod -R 777 files/product-exports/

结果

导出部分工作正常,我将文件导出,如下图所示

enter image description here 但我一直得到这个

enter image description here

whitegreen颜色代码有什么不同?

为什么它放在点.下面?

这有什么意义吗?

问题

这是否与权限有关?

如何继续进行调试?

我现在正在接受任何建议。

任何提示/建议/帮助都将非常感谢!

更新

根据 @Tensibai

的要求

cd /home/forge/site.com/& amp;& pwd&& php /home/forge/site.com/artisan产品:exportdiff --env =生产

/home/forge/site.com

.
Export created successfully. Export ID is 1085
Source: /home/forge/site/files/product-exports/export1085_2016-11-23.csv
Destination: /Site/inbound/products/productexport1085_2016-11-23.csv
$source NOT exist !



  [Exception]                                                                                              
  Could not open local file: /home/forge/site/files/product-exports/export1085_2016-11-23.csv.  



products:exportdiff

UPDATE2

$source = /home/forge/site/files/product-exports/export1088_2016-11-23.csv

我已尝试dd(file_exists($source));

它保持返回bool(false)

是否因为我检查file_exists的方式?

UPDATE3

以下是ExportProductsDiff.php

的完整PHP代码
<?php

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class ExportProductsDiff extends Command {

    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'products:exportdiff';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Export all products to Diff.';

    /**
     * The system export message.
     *
     * @var string
     */
    protected $system_message = '[System Diff Export]';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function fire()
    {
        // Export the products by calling the ExportProducts Command
        $options = [
            '--format'          => "distributor",
            '--encoding'        => "standard csv",
            '--categories'      => "all categories",
            '--conjugate'       => 1,
            '--include_disabled'=> 1,
            '--export_notes'    => $this->system_message
        ];

        // Run the export
        $this->call('products:export', $options);

        $last_run_export = ProductExport::where('notes', '=', $this->system_message)
            ->where('status', '=', 'finished')
            ->where('format', '=', 'distributor')
            ->orderBy('id', 'desc')
            ->firstOrFail();
        $this->info('Export created successfully. Export ID is ' . $last_run_export->id);

        $env = $this->option('env');
        if ($env == 'production'){
            $localdomain = '*******';
        }else{
            $env = 'development';
            $localdomain = '*******';
        }

        $sftp_server = '*******';
        $sftp_user_name = '*******';
        $sftp_user_pass = '*******';

        // Open the SFTP connection
        $connection = @ssh2_connect($sftp_server);
        if (!$connection)
        {
            throw new Exception("Could not connect to $sftp_server.");
        }

        // Login to the SFTP server
        if (! @ssh2_auth_password($connection, $sftp_user_name, $sftp_user_pass))
        {
            throw new Exception("Could not authenticate with username $sftp_user_name " .
                "and password $sftp_user_pass.");
        }
        $sftp = @ssh2_sftp($connection);
        if (!$sftp)
        {
            throw new Exception("Could not initialize SFTP subsystem.");
        }

        // Prepare the files
        $source = '/home/forge/site/files/product-exports/' . $last_run_export->file_name;



        /////////////////////////////////////
        //The bug is here 
        // update site to site.com 
        /////////////////////////////////////




        $destination = '/Site/inbound/products/product' . $last_run_export->file_name;

        $this->info('Source: ' . $source);
        $this->info('Destination: ' . $destination);

        if (!file_exists('/Site/inbound/products/')) {
            ssh2_sftp_mkdir($sftp, '/Site/inbound/products/', 0775, true);
        }

        dd(file_exists($source));

        if (file_exists($source)) {
            chmod($source, 0775);
        }else{
            $this->info('$source NOT exist !');
        }

        // Upload the file
        $stream = @fopen("ssh2.sftp://$sftp$destination", 'w');

        if (!$stream)
        {
            throw new Exception("Could not open file: $destination");
        }

        $data_to_send = @file_get_contents($source);
        if ($data_to_send === false)
        {
            throw new Exception("Could not open local file: $source.");
        }

        if (@fwrite($stream, $data_to_send) === false)
        {
            throw new Exception("Could not send data from file: $source.");
        }

        @fclose($stream);

        // Delete the export when finished
        if (file_exists(base_path() . ProductExport::path . $last_run_export->file_name))
        {
            unlink(base_path() . ProductExport::path . $last_run_export->file_name);
        }
        $last_run_export->delete();
    }

    /**
     * Get the console command arguments.
     *
     * @return array
     */
    protected function getArguments()
    {
        return array();
    }

    /**
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions()
    {
        return array();
    }

}

2 个答案:

答案 0 :(得分:2)

  

白色和绿色代码有什么不同?

绿色表示可执行文件(+ x)​​,原因是之前的chmod 777

  

为什么它放在圆点下面。 ?

我假设您按照修改时间按升序对条目进行排序ls -altr,每次创建文件时,目录inode都会被修改,因此它会在您的文件之前列出(目录在创建文件时修改,在写完所有文本后修改文件)

  

这有什么意义吗?

嗯,一般来说是的,特别是对于你的错误,我们从你开始的目录中找不到任何线索,如果它相对于你所在的地方写的话,那么你是不是很正常。找到文件。

尝试ls /home/forge/biossantibodies.com/files/product-exports/,如果收到错误cd /home/forge/biossantibodies.com/,请重新运行php命令。

答案 1 :(得分:1)

  • 可执行文件:绿色
  • 目录:蓝色
  • 图片文件(jpg,gif,bmp,png,tif): Magenta
  • 符号链接:青色
  • 管道:黄色
  • 插座: Magenta
  • 孤立的符号链接:闪烁醒目的白色带红色 背景
  • 阻止设备驱动程序:粗体黄色前景,黑色 背景
  • 缺少链接及其指向的文件:闪烁粗体白色 红色背景
  • 档案或压缩文件(如tar,gz,zip,rpm):红色
  • 该目录在条目
  • 中有自己的链接
  • 每个子目录都有一个通过 .. 发回的链接。

    因此,文件权限似乎没有什么特别之处,请检查您访问文件或共享代码的方式。