Jak naprawić błąd HTTP podczas przesyłania zdjęć?

28

Używam WordPress 3.4.1 na Ubuntu 12.04, używając Apache i PHP 5.3.X

Kiedy loguję się do deski rozdzielczej i dodaję nowy post. Następnie spróbuj przesłać obraz, aby ustawić go jako wyróżniony obraz, otrzymuję czerwone pole z komunikatem „Błąd HTTP”.

Czytałem o osobach, które mówią, że nie używają programu do przesyłania plików flash i po prostu używają programu do przesyłania plików przeglądarki, ale gdy spróbuję, dostaję błąd wewnętrzny serwera 500.

Próbowałem dodać AddType x-mapp-php5 .phpna początku mojego pliku .htaccess, ale bez powodzenia.

Wyłączenie WSZYSTKICH wtyczek nie przyniosło żadnego efektu. Próbowałem świeżej instalacji. Brak szczęścia.

Aktualizacja 17.10.2016 - Jeśli używasz niestandardowych ról lub możliwości, spróbuj użyć natywnej roli / możliwości i spróbuj ponownie.

Rzeczy do rozważenia:

  • Własność pliku
  • Uprawnienia do plików
  • .htaccess konfiguracja
  • Wersja PHP 7+
  • WordPress Aktualna wersja

Jeśli korzystasz z serwera proxy, upewnij się, że limity czasu serwera proxy są poprawnie skonfigurowane.

Błąd HTTP przesyłania WordPress 3.4.1

Michael Ecklund
źródło
Jakie jest uzasadnienie AddType x-mapp-php5 .php? To wydaje się być bardzo specyficzne dla serwera. Wydaje mi się, że bardziej prawdopodobne jest uszkodzenie strony (np. PHP) okropnie (lub nic nie robić, jeśli masz szczęście), niż poprawianie czegokolwiek?
MrWhite

Odpowiedzi:

25

Wstawiam następujący kod do mojego functions.phppliku. To działa!

add_filter( 'wp_image_editors', 'change_graphic_lib' );

function change_graphic_lib($array) {
  return array( 'WP_Image_Editor_GD', 'WP_Image_Editor_Imagick' );
}

Pomaga to, ponieważ zmienia moduł kodu PHP używany do przetwarzania przesłanego obrazu do użycia z WordPress.

Przetwarzanie to obejmuje przenoszenie obrazu do bazy danych biblioteki multimediów i generowanie obrazów o różnych rozmiarach („miniatura”, „średnia”, „duża”), do których WordPress zawsze chce mieć dostęp do motywów.

Powoduje użycie modułu „GD”, ponieważ jest on pierwszy. W niektórych konfiguracjach serwerów nowsza biblioteka „Imagick” nie działa dobrze z innymi w niektórych scenariuszach obrazu, takich jak duże wymiary pikseli, więc wymuszenie użycia biblioteki „GD” jest poprawką.

Allen
źródło
Lepiej jest utworzyć małą wtyczkę niż wstawić ją do functions.php, ponieważ jeśli zmienisz motyw, stracisz kod. I jestem pewien, że chcesz, aby działało to po zmianie motywu 😊
EliasNS 15.01.18
1
+1 To działało dla mnie, gdy napotkałem ten problem z gotową konfiguracją WP 4.9.4 na nowym koncie HostGator. @EliasNS noob tutaj; jaki jest właściwy sposób, aby zrobić do tego małą wtyczkę?
Andrew Janke
@AndrewJanke, możesz użyć wtyczki 😅 es.wordpress.org/plugins/pluginception
EliasNS
„Imagick” ? Nie „ImageMagick” ?
Peter Mortensen
21

Po rozwiązaniu problemu z @Wyck na czacie, zawęziliśmy się do podstawowej kwestii.

Problem związany był z tym, że moja konfiguracja serwera nie ma odpowiedniej ilości pamięci przydzielonej do Apache / PHP.

Jeśli ktoś ma ten sam problem, spróbuj sprawdzić, czy masz wystarczającą (64 MB +) pamięć serwera przydzieloną Apache / PHP w ustawieniach konfiguracji serwera. Możesz również dodać to do pliku wp-config.php:

define('WP_MEMORY_LIMIT', '64MB');

Jeśli powyższe rozwiązanie nie działa, przeczytaj artykuł Problemy z programem Image / Media Uploader? do dalszego rozwiązywania problemów.

Spróbuj dodać jeden lub wszystkie z poniższych poprawek .htaccess do pliku .htaccess w katalogu głównym instalacji WordPress.

Poważnie, wypróbuj jedno z poniższych rozwiązań, aby wiedzieć, które z nich rozwiązało problem. Nie wklejaj ich wszystkich natychmiast do pliku .htaccess.

Wypróbuj tę linię:

AddType x-mapp-php5 .php

mod_security może powodować problemy. Wyłącz, aby zobaczyć, czy to jest problem. Aby to zrobić, utwórz plik .htaccess w katalogu wp-admin. Dodaj to do niego:

<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>

Jeśli używasz kontroli dostępu opartej na uwierzytelnianiu na swoim serwerze internetowym (często znanym jako htpasswd, uwierzytelnianie podstawowe, katalog chroniony hasłem lub podobny), WordPress nie jest w stanie obsłużyć go dla Flash Uploadera, Crona i XMLRPC. Powiązane pliki należy wykluczyć z pracy. Pamiętaj, że może to złamać twoje względy bezpieczeństwa.

# Exclude the file upload and WordPress CRON scripts from authentication
<FilesMatch "(async-upload\.php|wp-cron\.php|xmlrpc\.php)$">
    Satisfy Any
    Order allow,deny
    Allow from all
    Deny from none
</FilesMatch>

Ostatnia uwaga: niektórzy powiedzieli, że jeśli używasz mniejszej wersji PHP 5.3.X, możesz spróbować wyłączyć tryb awaryjny PHP.

Jeśli korzystasz z wielu witryn WordPress i otrzymujesz błędy HTTP lub wewnętrzne błędy serwera związane z przesyłaniem obrazów, przeczytaj Przesyłanie zdjęć do wielu witryn powoduje błąd HTTP ), aby znaleźć inne możliwe pomysły i rozwiązania problemów.

Michael Ecklund
źródło
ok ... dobrze wiedzieć ... czy przeczytałeś, że WP próbuje przydzielić do 256 MB pamięci RAM, więc define('WP_MEMORY_LIMIT', '64MB');powinno to być większe, jeśli to możliwe.
Damien
1
Jeśli używasz WP 4.1.1, AddType x-mapp-php5 .phpnie jest to już realne rozwiązanie, ponieważ zmusza stronę do drukowania kodu PHP jako zwykłego tekstu
cameronjonesweb
1
Lub dodaj to do pliku konfiguracyjnego stron, jeśli używasz nginx:client_max_body_size 128m;
Flatron
4

Wystąpił ten sam błąd podczas próby przesłania multimediów w wordpress. W Chrome pojawia się jako błąd http: błąd; w przeglądarce Firefox błąd wygląda zupełnie inaczej. Internet to pełne historie ludzi, którzy spędzili kilka dni na ściganiu błędu (ja też :-(). Rozwiązań jest mnóstwo, ale nikt nie wyjaśnia dlaczego, przynajmniej nie w sposób zgodny z objawami.

Mój godny uwagi wkład: zauważyłem, że problem koreluje z błędem segmentacji sygnalizowanym w pliku dziennika apache2. Niepokoi mnie to, ponieważ trudno jest zdiagnozować.

Ponowne uruchomienie całego serwera usunęło wszystkie objawy i nagle mogłem ponownie załadować media w Wordpress. Frustrujące jest to, że nie mam pojęcia, dlaczego tak się dzieje. Ponowne uruchomienie skutecznie powstrzymało mnie od dalszych badań i teraz będę musiał czekać (tygodnie? Miesiące?) Na ponowne pojawienie się problemu. Mam nadzieję, że pomoże to innym w poszukiwaniu przyczyny tego problemu. Moja żona jest jednak szczęśliwa, ponieważ nie mogę już dłużej nocować w pogoni za tym problemem ...

Stef Joosten
źródło
1

Mam rozwiązany ten problem poprzez zmianę mojego właściciela od rootcelu apache, jak poniżej.

chown -R apache:apache /var/www/html/mydomain

A potem zmieniłem pozwolenie wp-content/uploads/na 775.

Następnie próbowałem załadować obraz w mediach. Udało mi się załadować obraz.

imran
źródło
0

Miałem ten sam problem. Wypróbowałem różne poprawki, w tym zmianę domyślnego procesora obrazu z PHP GD na ImageMagick przy użyciu wtyczki Force Image Magick

Pomogło to z błędem HTTP / błędem 500, ale miniatury nie były już generowane. Następnie ponownie dezaktywowałem wtyczkę i pomogła mi ta odpowiedź na pytanie. Wygląda na to, że zmiana rozmiaru obrazu nie działa dobrze . Mój PHP_MEMORY_LIMITzostał ustawiony 160MBna absolutne maksimum, na jakie pozwala mój hosting.

W przypadku przesyłania obrazów skutkowało to maksymalnymi możliwymi wymiarami obrazu 6000 x 6000 pxpodczas korzystania z PHP GD i generowania miniatur. Dlatego ważne jest, aby nie tylko sprawdzić rozmiar pliku, ale także wymiary obrazu. Przesłanie obrazu o większych wymiarach spowodowało błąd HTTP / błąd 500, nawet przy małych rozmiarach plików.

intagli
źródło
0

Doświadczyłem takiej emisji wiele razy i rozwiązany przez zwiększenie memory_limit = 256Mw php.ini lub dodanie define( 'WP_MEMORY_LIMIT', '256M' );w wp-config.phppliku (* W razie potrzeby można zwiększyć pamięć ponad 256M) przez większość czasu.

Innym możliwym rozwiązaniem może być zezwolenie na \wp-content\uploads\folder; Polecenie: chmod -R 0755 wp-content\uploads\.

Mam nadzieję, że to może ci pomóc.

rony2k6
źródło