2016-05-28 7 views
1

У меня есть простой веб-хостинг, на SourceForge. Весь веб-хостинг на SourceForge использует SFTP.Как сохранить файл с URL-адреса на веб-сервер Sourceforge на PHP?

Теперь я хочу, чтобы получить файл на другом сервере (у меня нет административного разрешения, но я могу его просмотра в веб-браузере, обычно такие как: http://data.example.com/videos/fun.mp4..) На мой веб-хостинга на SourceForge (The структура хостинга: /home/project-web/my-own-project/htdocs/my-folder).

Я прочитал эти ответы на многие вопросы, такие как:

Я пытался со всеми ответами. Он отобразил сообщение о завершении; но на моем сервере нет файлов.


Затем я попытался с изменением CHMOD на 777 (я понимаю, что это повреждение, поэтому я попытался только для тестирования). И файл тоже нет; в другом ответе есть пустой файл.

У меня есть phpinfo(); для проверки cURL, он (всегда) включен.


Не могли бы вы рассказать мне, что не так в моем списке дел. И, пожалуйста, покажите мне: «Как загрузить файл с URL-адреса на веб-хостинг SourceForge, через PHP?».


Мой вопрос не дублируется с существовавшими вопросами о переполнении стека.
Я использовал 20 KB файл для тестирования; но загруженный файл на моем сервере пуст.

+0

Вы проверили запись пустого файла на хостинг веб-сервера, если вы можете вообще записать файл в свою файловую структуру. , например. попробуйте file_put_contents ('testfile.txt', 'success'); Поместите код в файл php и запустите этот файл php. Найдите файл testfile.txt в том же каталоге, где находится php-файл. Если вы вообще можете написать файл, его можно исправить. – Aditya

+0

Хорошо. И я забыл спросить, если вы проверили в php.ini 'allow_url_fopen'? Сказав, что вы протестировали файл с 20 КБ, вы хотите сказать, что вы загрузили 20 КБ-файл с какого-то URL-адреса на сайт хостинга? – Aditya

+0

Пожалуйста, проверьте это. – Aditya

ответ

3

Обновлено согласно Use-политики: https://sourceforge.net/p/forge/documentation/Project%20Web%20and%20Developer%20Web/#outbound-connectivity

Из-за небрежности, исходящего доступа к другим хостам с веб-серверов строго запрещено, и блокируется правилами брандмауэра. Этот включает в себя доступ к другим хостам SourceForge.net; единственными исключениями для этой политики являются доступ к нашим серверам баз данных проектов и авторизованные исходящие письма . Доступ к серверу SCM недоступен из проекта веб-серверов. Любое содержимое, необходимое с других сайтов SourceForge.net , должно быть восстановлено и сохранено в виде файла или записи базы данных, которое может быть , после чего их можно получить из сценариев на веб-серверах проекта. В то время как наша установка PHP (и другие языки) включает поддержку таких вещей, как LDAP, IMAP и Postgres, мы не разрешаем подключение или исходящую связь с использованием этих протоколов.Эти компоненты включены так, что сторонний код может храниться при развертывании на веб-серверах SourceForge.net; и поддерживать тестирование проекта , который требует этих функций.

Таким образом, возможность подключения к внешним узлам блокируется брандмауэром и невозможен.


Пожалуйста, напишите свой phpinfo() выход в ваш вопрос. В частности, информация о системе (верхняя часть), ядро, завиток, сокеты и стандартные значения раздела (оставьте любую конфиденциальную информацию, такую ​​как пароли/соединения базы данных).

Есть много вещей, которые могут помешать ему сохранить, разрешения пользователя (на исполняемый файл), конфигурацию сервера, suPHP (изолированный пользователь), chrooted веб-каталог, конфигурацию php и т. Д. Нам нужно будет увидеть фактический код вы использовали для диагностики вашего specific issue.

Что-то попробовать, используйте этот код.

<?php 

if (file_put_contents('/home/project-web/my-own-project/htdocs/my-folder/test.txt', 'Hello World!')) { 
    echo 'File Saved Successfully!'; 
} 

если test.txt существует и говорит Hello World! при загрузке и открыть его SFTP, попробуйте ниже.

Также большинство пользователей SFTP необходимо обновить после добавления нового контента на сервер. Поэтому, пожалуйста, убедитесь, что вы обновили свой SFTP-клиент.


<?php 

umask(0000); //this sets everything this script interacts with as everyone writable/executable 
//(same as chmod(0777)) 

$output_path = '/home/project-web/my-own-project/htdocs/my-folder'; 
$out_file = 'fun.mp4'; 
$source = file_get_contents('http://data.example.com/videos/fun.mp4'); 
if (empty($source)) { 
    die('No Content Received'); 
} 
if ([email protected]($output_path, 0777, true) && !is_dir($output_path)){ 
    die('Unable to create destination directory!'); 
} 
if (file_put_contents($output_path . '/' . $out_file, $source)) { 
    echo 'File Saved Successfully!'; 
} 

Я тестировал выше на моем веб-сервере с 5 MB MP4 (в частности http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4 - первый результат Google для mp4 скачать) и он работал отлично.

Это было бы последним усилием, чтобы заставить его работать.

+0

Хороший ответ, *** + 1 *** для вас. – lvk