gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:06 24 4
gpt4 key购买 nike

我创建了一个 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

white 之间有什么不同?和 green颜色代码?

为什么放在点.下面?这有什么意义吗?

这与权限有关吗?


更新

@Tensibai的要求

cd/home/forge/site.com/&& pwd && php/home/forge/site.com/artisan products:exportdiff --env=production

/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

更新2

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

我试过了 dd(file_exists($source));

一直返回bool(false)

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


更新3

这是我为 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();
}

}

最佳答案

What is the different between white and green color code ?

由于您之前的 chmod 777,绿色是可执行文件 (+x)

Why does it place under the dot . ?

我假设你做了一个 ls -altr 将条目按修改时间升序排序,每次创建文件时,目录 inode 都会被修改,所以它就列在你的文件之前 (目录在文件创建时修改,文件在所有文本写入后修改)

Does it mean anything at all ?

嗯,一般来说是的,特别是对于你的错误,我们不知道你从哪个目录开始,如果它写的是相对于你所在的位置,那么你找不到文件是正常的。

尝试 ls/home/forge/biossantibodies.com/files/product-exports/ 如果出现错误,cd/home/forge/biossantibodies.com/ 并重新运行您的 php 命令。

关于php - 无法打开本地文件,但文件在那里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40768724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com