PDOException auf Doppelte Dateinamen in Drupal 7
Verwenden Sie den folgenden code:
foreach ($form_state['values']['uploads'] as $key => $value) {
if (strlen($value)) {
$file = file_save_upload($key, array(
'file_validate_is_image' => array(), //Validates file is really an image.
'file_validate_extensions' => array('png gif jpg jpeg'), //Validate extensions.
));
//If the file passed validation:
if ($file) {
//Move the file, into the Drupal file system
if ($file = file_move($file, 'public://')) {
//Save the file for use in the submit handler.
$form_state['values']['uploaded_photos'][] = $file;
$x++;
} else {
form_set_error($key, t('Failed to write the uploaded file the site\'s file folder.'));
}
}
}
}
Ich versuche zu speichern, Bilder anbei, um eine form in der ein Cache-Objekt mit CTools. All das war in Ordnung arbeiten, bis ich versuchte, das hochladen der gleichen Datei wieder ab, und ich habe einen weißen Bildschirm, der sagte: "Fehler - Die website ist ein Fehler aufgetreten." (Riss von watchdog):
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'public://ad-10.jpg'; for key 2: UPDATE {file_managed} SET uid=:db_update_placeholder_0, filename=:db_update_placeholder_1, uri=:db_update_placeholder_2, filemime=:db_update_placeholder_3, filesize=:db_update_placeholder_4, status=:db_update_placeholder_5, timestamp=:db_update_placeholder_6
WHERE (fid = :db_condition_placeholder_0) ; Array
(
[:db_update_placeholder_0] => 0
[:db_update_placeholder_1] => ad-10.jpg
[:db_update_placeholder_2] => public://ad-10.jpg
[:db_update_placeholder_3] => image/jpeg
[:db_update_placeholder_4] => 4912
[:db_update_placeholder_5] => 0
[:db_update_placeholder_6] => 1326221376
[:db_condition_placeholder_0] => 834
)
";s:9:"%function";s:21:"drupal_write_record()";
Da bin ich nicht die Einstellung $ersetzen argument, sollte es nicht standardmäßig FILE_EXISTS_RENAME und deshalb nicht diesen Fehler auslösen? Wie kann ich dies beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dieses Modul. Es behebt das Problem der gleichzeitigen Datei-Objekt geschrieben db. https://drupal.org/project/upload_qc
Kann ich nicht kommentieren, warum das nicht funktioniert (es sieht aus wie es sollte jedenfalls), aber ich kann bieten eine einfachere Lösung.
Drupal hat eigentlich ein form-widget eingebaut, um handle-Datei-uploads, die
managed_file
geben. Es behandelt alle die Datei hochladen und überprüfen für Sie, Sie brauchen nur zu markieren, die Dateien als dauerhaft in Ihrer form submit handler.So, in Ihrer form Funktion:
Und dann in deinem submit-handler:
Hoffe, das hilft
Ich hatte das gleiche Problem, weil der seltsame, der nicht verwendeten temporären Dateien.
Sie können prüfen, ob Sie nicht verwendete Dateien verwenden:
Wenn Sie sich nicht hochladen die Datei mit dem gleichen Namen, die Sie sehen, können Sie Sie entfernen(Aber überprüfen und backup zuerst):